Allow returning XML from single-column queries

This commit is contained in:
Franz-Josef Färber
2022-05-04 10:27:28 -05:00
committed by Steve Chavez
parent a2349d90c0
commit 5a3fbd7111
6 changed files with 24 additions and 2 deletions
+1
View File
@@ -26,6 +26,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- #2236, Support POSIX regular expression operators for row filtering - @enote-kane
- #2202, Allow returning XML from RPCs - @fjf2002
- #2269, Allow `limit=0` in the request query to return an empty array - @gautam1168, @laurenceisla
- #2268, Allow returning XML from single-column queries #2268 - @fjf2002
### Fixed
+1
View File
@@ -270,6 +270,7 @@ handleRead headersOnly identifier context@RequestContext{..} = do
(iAcceptContentType == CTSingularJSON)
(shouldCount iPreferCount)
(iAcceptContentType == CTTextCSV)
(iAcceptContentType == CTTextXML)
bField
configDbPreparedStatements
+3 -2
View File
@@ -86,9 +86,9 @@ createWriteStatement selectQuery mutateQuery wantSingle isInsert asCsv rep pKeys
decodeStandard =
fromMaybe (Nothing, 0, [], mempty, Right [], Right Nothing) <$> HD.rowMaybe standardRow
createReadStatement :: SQL.Snippet -> SQL.Snippet -> Bool -> Bool -> Bool -> Maybe FieldName -> Bool ->
createReadStatement :: SQL.Snippet -> SQL.Snippet -> Bool -> Bool -> Bool -> Bool -> Maybe FieldName -> Bool ->
SQL.Statement () ResultsWithCount
createReadStatement selectQuery countQuery isSingle countTotal asCsv binaryField =
createReadStatement selectQuery countQuery isSingle countTotal asCsv asXml binaryField =
SQL.dynamicallyParameterized snippet decodeStandard
where
snippet =
@@ -109,6 +109,7 @@ createReadStatement selectQuery countQuery isSingle countTotal asCsv binaryField
bodyF
| asCsv = asCsvF
| isSingle = asJsonSingleF False
| isJust binaryField && asXml = asXmlF $ fromJust binaryField
| isJust binaryField = asBinaryF $ fromJust binaryField
| otherwise = asJsonF False
+8
View File
@@ -1010,6 +1010,14 @@ spec actualPgVersion = do
, matchHeaders = ["Content-Type" <:> "text/plain; charset=utf-8"]
}
it "can get raw xml output with Accept: text/xml" $
request methodGet "/xmltest?select=xml" (acceptHdrs "text/xml") ""
`shouldRespondWith`
"<myxml>foo</myxml>bar<foobar><baz/></foobar>"
{ matchStatus = 200
, matchHeaders = ["Content-Type" <:> "text/xml; charset=utf-8"]
}
it "fails if a single column is not selected" $ do
request methodGet "/images?select=img,name&name=eq.A.png" (acceptHdrs "application/octet-stream") ""
`shouldRespondWith`
+1
View File
@@ -178,6 +178,7 @@ GRANT ALL ON TABLE
, limited_delete_items_wnonuniq_view
, limited_delete_items_cpk_view
, limited_update_items_cpk_view
, xmltest
TO postgrest_test_anonymous;
GRANT INSERT ON TABLE insertonly TO postgrest_test_anonymous;
+10
View File
@@ -2583,3 +2583,13 @@ select $$
</body>
</html>$$::pg_catalog.xml;
$_$;
CREATE TABLE test.xmltest (
id integer primary key,
xml pg_catalog.xml NOT NULL
);
INSERT INTO test.xmltest VALUES
(1, '<myxml>foo</myxml>'),
(2, 'bar'),
(3, '<foobar><baz/></foobar>');