Fix #1180, embedding on views with composite pks
Also add CHANGELOG entries for previous fixes.
This commit is contained in:
committed by
Steve Chávez
parent
dc834572d6
commit
5bfb68b982
@@ -395,6 +395,36 @@ spec = do
|
||||
it "works when having a capitalized table name and camelCase fk column" $
|
||||
get "/foos?select=*,bars(*)" `shouldRespondWith` 200
|
||||
|
||||
it "works when embedding a view with a table that has a long compound pk" $ do
|
||||
get "/player_view?select=id,contract(purchase_price)&id=in.(1,3,5,7)" `shouldRespondWith`
|
||||
[json|
|
||||
[{"id":1,"contract":[{"purchase_price":10}]},
|
||||
{"id":3,"contract":[{"purchase_price":30}]},
|
||||
{"id":5,"contract":[{"purchase_price":50}]},
|
||||
{"id":7,"contract":[]}] |]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
get "/contract?select=tournament,player_view(first_name)&limit=3" `shouldRespondWith`
|
||||
[json|
|
||||
[{"tournament":"tournament_1","player_view":{"first_name":"first_name_1"}},
|
||||
{"tournament":"tournament_2","player_view":{"first_name":"first_name_2"}},
|
||||
{"tournament":"tournament_3","player_view":{"first_name":"first_name_3"}}] |]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
it "works when embedding a view with a view that referes to a table that has a long compound pk" $ do
|
||||
get "/player_view?select=id,contract_view(purchase_price)&id=in.(1,3,5,7)" `shouldRespondWith`
|
||||
[json|
|
||||
[{"id":1,"contract_view":[{"purchase_price":10}]},
|
||||
{"id":3,"contract_view":[{"purchase_price":30}]},
|
||||
{"id":5,"contract_view":[{"purchase_price":50}]},
|
||||
{"id":7,"contract_view":[]}] |]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
get "/contract_view?select=tournament,player_view(first_name)&limit=3" `shouldRespondWith`
|
||||
[json|
|
||||
[{"tournament":"tournament_1","player_view":{"first_name":"first_name_1"}},
|
||||
{"tournament":"tournament_2","player_view":{"first_name":"first_name_2"}},
|
||||
{"tournament":"tournament_3","player_view":{"first_name":"first_name_3"}}] |]
|
||||
{ matchHeaders = [matchContentTypeJson] }
|
||||
|
||||
describe "path fixed" $ do
|
||||
it "works when requesting children 2 levels" $
|
||||
get "/clients?id=eq.1&select=id,projects:projects.client_id(id,tasks(id))" `shouldRespondWith`
|
||||
|
||||
Vendored
+22
-1
@@ -250,7 +250,7 @@ INSERT INTO tsearch VALUES (to_tsvector('It''s kind of fun to do the impossible'
|
||||
INSERT INTO tsearch VALUES (to_tsvector('But also fun to do what is possible'));
|
||||
INSERT INTO tsearch VALUES (to_tsvector('Fat cats ate rats'));
|
||||
INSERT INTO tsearch VALUES (to_tsvector('french', 'C''est un peu amusant de faire l''impossible'));
|
||||
INSERT INTO tsearch VALUES (to_tsvector('german', 'Es ist eine Art Spaß, das Unmögliche zu machen'));
|
||||
INSERT INTO tsearch VALUES (to_tsvector('german', 'Es ist eine Art Spaß, das Unmögliche zu machen'));
|
||||
|
||||
--
|
||||
-- Data for Name: users_projects; Type: TABLE DATA; Schema: test; Owner: -
|
||||
@@ -442,3 +442,24 @@ INSERT INTO jsonb_test VALUES (1, '{ "a": {"b": 2} }');
|
||||
INSERT INTO jsonb_test VALUES (2, '{ "c": [1,2,3] }');
|
||||
INSERT INTO jsonb_test VALUES (3, '[{ "d": "test" }]');
|
||||
INSERT INTO jsonb_test VALUES (4, '{ "e": 1 }');
|
||||
|
||||
TRUNCATE TABLE private.player CASCADE;
|
||||
INSERT into private.player
|
||||
SELECT
|
||||
generate_series,
|
||||
'first_name_' || generate_series,
|
||||
'last_name_' || generate_series,
|
||||
'2018-10-11'
|
||||
FROM generate_series(1, 12);
|
||||
|
||||
TRUNCATE TABLE contract CASCADE;
|
||||
insert into contract
|
||||
select
|
||||
'tournament_' || generate_series,
|
||||
tsrange(now()::timestamp, null),
|
||||
10*generate_series,
|
||||
generate_series,
|
||||
'first_name_' || generate_series,
|
||||
'last_name_' || generate_series,
|
||||
'2018-10-11'
|
||||
from generate_series(1, 6);
|
||||
|
||||
Vendored
+3
@@ -89,6 +89,9 @@ GRANT ALL ON TABLE
|
||||
, foos
|
||||
, bars
|
||||
, materialized_projects
|
||||
, contract
|
||||
, player_view
|
||||
, contract_view
|
||||
TO postgrest_test_anonymous;
|
||||
|
||||
GRANT INSERT ON TABLE insertonly TO postgrest_test_anonymous;
|
||||
|
||||
Vendored
+23
@@ -1579,3 +1579,26 @@ create or replace function test."quotedFunction"("user" text, "fullName" text, "
|
||||
returns jsonb AS $$
|
||||
select format('{"user": "%s", "fullName": "%s", "SSN": "%s"}', "user", "fullName", "SSN")::jsonb;
|
||||
$$ language sql;
|
||||
|
||||
create table private.player (
|
||||
id integer not null,
|
||||
first_name text not null,
|
||||
last_name text not null,
|
||||
birth_date date,
|
||||
primary key (last_name, id, first_name, birth_date) -- just for testing a long compound pk
|
||||
);
|
||||
|
||||
create table test.contract (
|
||||
tournament text not null,
|
||||
time tsrange not null,
|
||||
purchase_price int not null,
|
||||
id integer not null,
|
||||
first_name text not null,
|
||||
last_name text not null,
|
||||
birth_date date,
|
||||
foreign key (last_name, id, first_name, birth_date) references private.player
|
||||
);
|
||||
|
||||
create view test.player_view as select * from private.player;
|
||||
|
||||
create view test.contract_view as select * from test.contract;
|
||||
|
||||
Reference in New Issue
Block a user