Fix invalid SQL generated for bulk upsert with empty array (#1270)
This commit is contained in:
committed by
Steve Chávez
parent
63826e9509
commit
74e38a1d80
@@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
- #1221, Fix embedding other resources when having a self join - @steve-chavez
|
- #1221, Fix embedding other resources when having a self join - @steve-chavez
|
||||||
- #1242, Fix embedding a view having a select in a where - @steve-chavez
|
- #1242, Fix embedding a view having a select in a where - @steve-chavez
|
||||||
- #1238, Fix PostgreSQL to OpenAPI type mappings for numeric and character types - @fpusch
|
- #1238, Fix PostgreSQL to OpenAPI type mappings for numeric and character types - @fpusch
|
||||||
|
- #1265, Fix query generated on bulk upsert with an empty array - @qu4tro
|
||||||
|
|
||||||
## [5.2.0] - 2018-12-12
|
## [5.2.0] - 2018-12-12
|
||||||
|
|
||||||
|
|||||||
@@ -295,8 +295,10 @@ requestToQuery schema _ (DbMutate (Insert mainTbl iCols onConflct putConditions
|
|||||||
IgnoreDuplicates ->
|
IgnoreDuplicates ->
|
||||||
"DO NOTHING"
|
"DO NOTHING"
|
||||||
MergeDuplicates ->
|
MergeDuplicates ->
|
||||||
"DO UPDATE SET " <> intercalate ", " (pgFmtIdent <> const " = EXCLUDED." <> pgFmtIdent <$> S.toList iCols)
|
if S.null iCols
|
||||||
) `emptyOnFalse` null oncCols) onConflct,
|
then "DO NOTHING"
|
||||||
|
else "DO UPDATE SET " <> intercalate ", " (pgFmtIdent <> const " = EXCLUDED." <> pgFmtIdent <$> S.toList iCols)
|
||||||
|
) `emptyOnFalse` null oncCols) onConflct,
|
||||||
("RETURNING " <> intercalate ", " (map (pgFmtColumn qi) returnings)) `emptyOnFalse` null returnings]
|
("RETURNING " <> intercalate ", " (map (pgFmtColumn qi) returnings)) `emptyOnFalse` null returnings]
|
||||||
where
|
where
|
||||||
qi = QualifiedIdentifier schema mainTbl
|
qi = QualifiedIdentifier schema mainTbl
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ spec =
|
|||||||
, matchHeaders = ["Preference-Applied" <:> "resolution=merge-duplicates", matchContentTypeJson]
|
, matchHeaders = ["Preference-Applied" <:> "resolution=merge-duplicates", matchContentTypeJson]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
it "succeeds when the payload has no elements" $
|
||||||
|
request methodPost "/articles" [("Prefer", "return=representation"), ("Prefer", "resolution=merge-duplicates")]
|
||||||
|
[json|[]|] `shouldRespondWith`
|
||||||
|
[json|[]|] { matchStatus = 201 , matchHeaders = [matchContentTypeJson] }
|
||||||
|
|
||||||
|
|
||||||
context "when Prefer: resolution=ignore-duplicates is specified" $ do
|
context "when Prefer: resolution=ignore-duplicates is specified" $ do
|
||||||
it "INSERTs and ignores rows on pk conflict" $
|
it "INSERTs and ignores rows on pk conflict" $
|
||||||
request methodPost "/tiobe_pls" [("Prefer", "return=representation"), ("Prefer", "resolution=ignore-duplicates")]
|
request methodPost "/tiobe_pls" [("Prefer", "return=representation"), ("Prefer", "resolution=ignore-duplicates")]
|
||||||
|
|||||||
Reference in New Issue
Block a user