refactor: PKcols in table, ViewKeyDependency type

* Get PKcols inside tables - done with SQL for tables and
  with an additional step in Haskell for views.

  This fixes an fk column being considered as a pk column on views
  and corrects the test added on
  https://github.com/PostgREST/postgrest/pull/1875/files/1d549768580310e18aac4ffa6dbd01c5b77934a7#r853674126

* classify view key dependencies in SQL

* remove Column from Relationship

* Merge cols/fcols in Relationship and
  ensure allM2ORels and allViewsKeyDependencies fk columns
  are ordered - done by attnum in SQL

* Cardinality now contains relColumns instead of Relationship -
  this simplifies getJoinConditions.
This commit is contained in:
steve-chavez
2022-04-21 13:19:38 -05:00
parent 057e8d63bf
commit d5b92a433a
11 changed files with 290 additions and 321 deletions
+1 -1
View File
@@ -27,6 +27,6 @@ spec =
request methodGet "/"
[("Accept", "application/json")] "" `shouldRespondWith`
[json| {
"qiSchema":"test","qiName":"orders_view"
"qiSchema":"test","qiName":"has_fk"
} |]
{ matchHeaders = [matchContentTypeJson] }
+3 -3
View File
@@ -595,7 +595,7 @@ spec actualPgVersion = do
}
context "requesting header only representation" $ do
it "returns a location header" $
it "returns a location header with a composite PK col" $
request methodPost "/compound_pk_view" [("Prefer", "return=headers-only")]
[json|{"k1":1,"k2":"test","extra":2}|]
`shouldRespondWith`
@@ -606,13 +606,13 @@ spec actualPgVersion = do
, "Content-Range" <:> "*/*" ]
}
it "should not throw and return location header when a PK is null" $
it "returns location header with a single PK col" $
request methodPost "/test_null_pk_competitors_sponsors" [("Prefer", "return=headers-only")]
[json|{"id":1}|]
`shouldRespondWith`
""
{ matchStatus = 201
, matchHeaders = [ matchHeaderAbsent hContentType
, "Location" <:> "/test_null_pk_competitors_sponsors?id=eq.1&sponsor_id=is.null"
, "Location" <:> "/test_null_pk_competitors_sponsors?id=eq.1"
, "Content-Range" <:> "*/*" ]
}