feat: add computed relationships
* work for select, mutations, rpc * overrides detected relationships
This commit is contained in:
committed by
Steve Chavez
parent
06c9e246f4
commit
d6ec171bcb
Vendored
+6
@@ -806,3 +806,9 @@ TRUNCATE TABLE unsafe_update_items CASCADE;
|
||||
INSERT INTO unsafe_update_items(id, name, observation) VALUES (1, 'item-1', NULL), (2, 'item-2', NULL), (3, 'item-3', NULL);
|
||||
TRUNCATE TABLE unsafe_delete_items CASCADE;
|
||||
INSERT INTO unsafe_delete_items(id, name, observation) VALUES (1, 'item-1', NULL), (2, 'item-2', NULL), (3, 'item-3', NULL);
|
||||
|
||||
TRUNCATE TABLE designers CASCADE;
|
||||
INSERT INTO designers(id, name) VALUES (1, 'Sid Meier'), (2, 'Hironobu Sakaguchi');
|
||||
|
||||
TRUNCATE TABLE videogames CASCADE;
|
||||
INSERT INTO videogames(id, name, designer_id) VALUES (1, 'Civilization I', 1), (2, 'Civilization II', 1), (3, 'Final Fantasy I', 2), (4, 'Final Fantasy II', 2);
|
||||
|
||||
Vendored
+2
@@ -197,6 +197,8 @@ GRANT ALL ON TABLE
|
||||
, safe_delete_items
|
||||
, unsafe_update_items
|
||||
, unsafe_delete_items
|
||||
, videogames
|
||||
, designers
|
||||
TO postgrest_test_anonymous;
|
||||
|
||||
GRANT INSERT ON TABLE insertonly TO postgrest_test_anonymous;
|
||||
|
||||
Vendored
+46
@@ -2707,3 +2707,49 @@ CREATE OR REPLACE FUNCTION test.load_safeupdate() RETURNS VOID AS $$
|
||||
BEGIN
|
||||
LOAD 'safeupdate';
|
||||
END; $$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
CREATE TABLE designers (
|
||||
id int primary key
|
||||
, name text
|
||||
);
|
||||
|
||||
CREATE TABLE videogames (
|
||||
id int primary key
|
||||
, name text
|
||||
, designer_id int references designers(id)
|
||||
);
|
||||
|
||||
-- computed relationships
|
||||
CREATE FUNCTION test.computed_designers(test.videogames) RETURNS SETOF test.designers AS $$
|
||||
SELECT * FROM test.designers WHERE id = $1.designer_id;
|
||||
$$ LANGUAGE sql STABLE ROWS 1;
|
||||
|
||||
CREATE FUNCTION test.computed_videogames(test.designers) RETURNS SETOF test.videogames AS $$
|
||||
SELECT * FROM test.videogames WHERE designer_id = $1.id;
|
||||
$$ LANGUAGE sql STABLE;
|
||||
|
||||
CREATE FUNCTION test.getallvideogames() RETURNS SETOF test.videogames AS $$
|
||||
SELECT * FROM test.videogames;
|
||||
$$ LANGUAGE sql STABLE;
|
||||
|
||||
CREATE FUNCTION test.getalldesigners() RETURNS SETOF test.designers AS $$
|
||||
SELECT * FROM test.designers;
|
||||
$$ LANGUAGE sql STABLE;
|
||||
|
||||
-- self join for computed relationships
|
||||
CREATE FUNCTION test.child_web_content(test.web_content) RETURNS SETOF test.web_content AS $$
|
||||
SELECT * FROM test.web_content WHERE $1.id = p_web_id;
|
||||
$$ LANGUAGE sql STABLE;
|
||||
|
||||
CREATE FUNCTION test.parent_web_content(test.web_content) RETURNS SETOF test.web_content AS $$
|
||||
SELECT * FROM test.web_content WHERE $1.p_web_id = id;
|
||||
$$ LANGUAGE sql STABLE ROWS 1;
|
||||
|
||||
-- overriding computed rels that empty the results
|
||||
CREATE FUNCTION test.designers(test.videogames) RETURNS SETOF test.designers AS $$
|
||||
SELECT * FROM test.designers WHERE FALSE;
|
||||
$$ LANGUAGE sql STABLE ROWS 1;
|
||||
|
||||
CREATE FUNCTION test.videogames(test.designers) RETURNS SETOF test.videogames AS $$
|
||||
SELECT * FROM test.videogames WHERE FALSE;
|
||||
$$ LANGUAGE sql STABLE;
|
||||
|
||||
Reference in New Issue
Block a user