From 88abf600c44785f7f9fdeb73142ec47a8b95515a Mon Sep 17 00:00:00 2001 From: Taimoor Zaeem Date: Fri, 12 Apr 2024 12:46:11 +0500 Subject: [PATCH] fix: fix wrong http status on pg error 42P17 infinite recursion --- CHANGELOG.md | 1 + docs/references/errors.rst | 2 ++ src/PostgREST/Error.hs | 1 + test/spec/Feature/Query/QuerySpec.hs | 7 +++++++ test/spec/fixtures/schema.sql | 7 +++++++ 5 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10d0c7caa..f22fa3ffd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - #3361, Clarify PGRST204(column not found) error message - @steve-chavez - #3373, Remove rejected mediatype `application/vnd.pgrst.object+json` from response - @taimoorzaeem - #3418, Fix OpenAPI not tagging a FK column correctly on O2O relationships - @laurenceisla + - #3256, Fix wrong http status for pg error `42P17 infinite recursion` - @taimoorzaeem ### Deprecated diff --git a/docs/references/errors.rst b/docs/references/errors.rst index bb05a9dfa..40a5ba79f 100644 --- a/docs/references/errors.rst +++ b/docs/references/errors.rst @@ -91,6 +91,8 @@ PostgREST translates `PostgreSQL error codes HTTP.status404 -- undefined table + "42P17" -> HTTP.status500 -- infinite recursion "42501" -> if authed then HTTP.status403 else HTTP.status401 -- insufficient privilege 'P':'T':n -> fromMaybe HTTP.status500 (HTTP.mkStatus <$> readMaybe n <*> pure m) "PGRST" -> diff --git a/test/spec/Feature/Query/QuerySpec.hs b/test/spec/Feature/Query/QuerySpec.hs index e1ce20aa1..3b1da167b 100644 --- a/test/spec/Feature/Query/QuerySpec.hs +++ b/test/spec/Feature/Query/QuerySpec.hs @@ -1407,3 +1407,10 @@ spec actualPgVersion = do { matchStatus = 200 , matchHeaders = [matchContentTypeJson] } + + context "test infinite recursion error 42P17" $ + it "return http status 500" $ + get "/infinite_recursion?select=*" `shouldRespondWith` + [json|{"code":"42P17","message":"infinite recursion detected in rules for relation \"infinite_recursion\"","details":null,"hint":null}|] + { matchStatus = 500 } + diff --git a/test/spec/fixtures/schema.sql b/test/spec/fixtures/schema.sql index 11a2ed708..e8d0f848d 100644 --- a/test/spec/fixtures/schema.sql +++ b/test/spec/fixtures/schema.sql @@ -3764,3 +3764,10 @@ create aggregate test.outfunc_agg (anyelement) ( create or replace function test.sleep(seconds double precision default 5) returns void as $$ select pg_sleep(seconds); $$ language sql; + +-- https://github.com/PostgREST/postgrest/issues/3256 +create view test.infinite_recursion as +select * from test.projects; + +create or replace view test.infinite_recursion as +select * from test.infinite_recursion;