fix: max-affected preference not failing for rpc with strict handling
This commit is contained in:
committed by
Steve Chavez
parent
e33ce843dd
commit
dc46aea15e
@@ -192,16 +192,25 @@ spec =
|
||||
{ matchStatus = 204
|
||||
, matchHeaders = ["Preference-Applied" <:> "handling=lenient"]}
|
||||
|
||||
it "should fail with rpc when deleting rows more than prefered" $
|
||||
request methodPost "/rpc/delete_all_items"
|
||||
context "test Prefer: max-affected with rpc" $ do
|
||||
it "should fail with rpc when deleting rows more than prefered with returns setof" $
|
||||
request methodPost "/rpc/delete_items_returns_setof"
|
||||
[("Prefer", "handling=strict, max-affected=10")]
|
||||
""
|
||||
`shouldRespondWith`
|
||||
[json| {"code":"PGRST124","details":"The query affects 15 rows","hint":null,"message":"Query result exceeds max-affected preference constraint"} |]
|
||||
{ matchStatus = 400 }
|
||||
|
||||
it "should succeed with rpc deleting rows less than prefered" $
|
||||
request methodPost "/rpc/delete_all_items"
|
||||
it "should fail with rpc when deleting rows more than prefered with returns table" $
|
||||
request methodPost "/rpc/delete_items_returns_table"
|
||||
[("Prefer", "handling=strict, max-affected=10")]
|
||||
""
|
||||
`shouldRespondWith`
|
||||
[json| {"code":"PGRST124","details":"The query affects 15 rows","hint":null,"message":"Query result exceeds max-affected preference constraint"} |]
|
||||
{ matchStatus = 400 }
|
||||
|
||||
it "should succeed with rpc deleting rows less than prefered with returns setof" $
|
||||
request methodPost "/rpc/delete_items_returns_setof"
|
||||
[("Prefer", "handling=strict, max-affected=20")]
|
||||
""
|
||||
`shouldRespondWith`
|
||||
@@ -209,3 +218,21 @@ spec =
|
||||
{"id":8},{"id":9},{"id":10},{"id":11},{"id":12},{"id":13},
|
||||
{"id":14},{"id":15}]|]
|
||||
{ matchStatus = 200 }
|
||||
|
||||
it "should succeed with rpc deleting rows less than prefered with returns table" $
|
||||
request methodPost "/rpc/delete_items_returns_table"
|
||||
[("Prefer", "handling=strict, max-affected=20")]
|
||||
""
|
||||
`shouldRespondWith`
|
||||
[json|[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},
|
||||
{"id":8},{"id":9},{"id":10},{"id":11},{"id":12},{"id":13},
|
||||
{"id":14},{"id":15}]|]
|
||||
{ matchStatus = 200 }
|
||||
|
||||
it "should fail with rpc when returns void with handling=strict" $
|
||||
request methodPost "/rpc/delete_items_returns_void"
|
||||
[("Prefer", "handling=strict, max-affected=20")]
|
||||
""
|
||||
`shouldRespondWith`
|
||||
[json| {"code":"PGRST128","details":null,"hint":null,"message":"Function must return SETOF or TABLE when max-affected preference is used with handling=strict"} |]
|
||||
{ matchStatus = 400 }
|
||||
|
||||
Vendored
+9
-1
@@ -3817,6 +3817,14 @@ where oid = 'test.collision_test_func'::regproc::oid;
|
||||
comment on function test.collision_test_func(id integer) is 'fizzbuzz';
|
||||
|
||||
|
||||
create or replace function test.delete_all_items() returns setof items as $$
|
||||
create or replace function test.delete_items_returns_setof() returns setof items as $$
|
||||
delete from items where id <= 15 returning *; -- deletes 15 items, then return them
|
||||
$$ language sql;
|
||||
|
||||
create or replace function test.delete_items_returns_table() returns table(id bigint) as $$
|
||||
delete from items where id <= 15 returning *;
|
||||
$$ language sql;
|
||||
|
||||
create or replace function test.delete_items_returns_void() returns void as $$
|
||||
delete from items;
|
||||
$$ language sql;
|
||||
|
||||
Reference in New Issue
Block a user