Merge pull request #244 from diogob/adds_materialized_views_to_root
Adds materialized views to list of relations in GET / [#242]
This commit is contained in:
@@ -9,6 +9,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
- Allow filters by computed columns
|
- Allow filters by computed columns
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
- Add materialized views to results in GET /
|
||||||
- Indicate insertable=true for views that are insertable through triggers
|
- Indicate insertable=true for views that are insertable through triggers
|
||||||
- Builds under GHC 7.10
|
- Builds under GHC 7.10
|
||||||
- Allow the use of columns named "count" in relations queried
|
- Allow the use of columns named "count" in relations queried
|
||||||
|
|||||||
@@ -43,12 +43,26 @@ tables :: Text -> H.Tx P.Postgres s [Table]
|
|||||||
tables schema = do
|
tables schema = do
|
||||||
rows <- H.listEx $
|
rows <- H.listEx $
|
||||||
[H.stmt|
|
[H.stmt|
|
||||||
select table_schema, table_name,
|
select
|
||||||
t.is_insertable_into::boolean OR coalesce(is_trigger_insertable_into::boolean, false)
|
n.nspname as table_schema,
|
||||||
from information_schema.tables t
|
relname as table_name,
|
||||||
left join information_schema.views using(table_catalog, table_schema, table_name)
|
c.relkind = 'r' or (c.relkind IN ('v', 'f')) and (pg_relation_is_updatable(c.oid::regclass, false) & 8) = 8
|
||||||
where table_schema = ?
|
or (exists (
|
||||||
order by table_name
|
select 1
|
||||||
|
from pg_trigger
|
||||||
|
where pg_trigger.tgrelid = c.oid and (pg_trigger.tgtype::integer & 69) = 69)
|
||||||
|
) as insertable
|
||||||
|
from
|
||||||
|
pg_class c
|
||||||
|
join pg_namespace n on n.oid = c.relnamespace
|
||||||
|
where
|
||||||
|
c.relkind in ('v', 'r', 'm')
|
||||||
|
and n.nspname = ?
|
||||||
|
and (
|
||||||
|
pg_has_role(c.relowner, 'USAGE'::text)
|
||||||
|
or has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) or has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text)
|
||||||
|
)
|
||||||
|
order by relname
|
||||||
|] schema
|
|] schema
|
||||||
return $ map tableFromRow rows
|
return $ map tableFromRow rows
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ spec = around withApp $ do
|
|||||||
, {"schema":"1","name":"insertable_view_with_join","insertable":true}
|
, {"schema":"1","name":"insertable_view_with_join","insertable":true}
|
||||||
, {"schema":"1","name":"items","insertable":true}
|
, {"schema":"1","name":"items","insertable":true}
|
||||||
, {"schema":"1","name":"json","insertable":true}
|
, {"schema":"1","name":"json","insertable":true}
|
||||||
|
, {"schema":"1","name":"materialized_view","insertable":false}
|
||||||
, {"schema":"1","name":"menagerie","insertable":true}
|
, {"schema":"1","name":"menagerie","insertable":true}
|
||||||
, {"schema":"1","name":"no_pk","insertable":true}
|
, {"schema":"1","name":"no_pk","insertable":true}
|
||||||
, {"schema":"1","name":"nullable_integer","insertable":true}
|
, {"schema":"1","name":"nullable_integer","insertable":true}
|
||||||
|
|||||||
Vendored
+11
@@ -169,6 +169,12 @@ ALTER TABLE "1".has_fk_id_seq OWNER TO postgrest_test;
|
|||||||
|
|
||||||
ALTER SEQUENCE has_fk_id_seq OWNED BY has_fk.id;
|
ALTER SEQUENCE has_fk_id_seq OWNED BY has_fk.id;
|
||||||
|
|
||||||
|
CREATE MATERIALIZED VIEW "1".materialized_view AS
|
||||||
|
SELECT
|
||||||
|
version();
|
||||||
|
|
||||||
|
ALTER TABLE "1".materialized_view OWNER TO postgrest_test;
|
||||||
|
|
||||||
CREATE VIEW "1".insertable_view_with_join AS
|
CREATE VIEW "1".insertable_view_with_join AS
|
||||||
SELECT has_fk.id,
|
SELECT has_fk.id,
|
||||||
has_fk.auto_inc_fk,
|
has_fk.auto_inc_fk,
|
||||||
@@ -563,6 +569,11 @@ REVOKE ALL ON TABLE tsearch FROM postgrest_test;
|
|||||||
GRANT ALL ON TABLE tsearch TO postgrest_test;
|
GRANT ALL ON TABLE tsearch TO postgrest_test;
|
||||||
GRANT ALL ON TABLE tsearch TO postgrest_anonymous;
|
GRANT ALL ON TABLE tsearch TO postgrest_anonymous;
|
||||||
|
|
||||||
|
REVOKE ALL ON TABLE materialized_view FROM PUBLIC;
|
||||||
|
REVOKE ALL ON TABLE materialized_view FROM postgrest_test;
|
||||||
|
GRANT ALL ON TABLE materialized_view TO postgrest_test;
|
||||||
|
GRANT ALL ON TABLE materialized_view TO postgrest_anonymous;
|
||||||
|
|
||||||
REVOKE ALL ON TABLE insertable_view_with_join FROM PUBLIC;
|
REVOKE ALL ON TABLE insertable_view_with_join FROM PUBLIC;
|
||||||
REVOKE ALL ON TABLE insertable_view_with_join FROM postgrest_test;
|
REVOKE ALL ON TABLE insertable_view_with_join FROM postgrest_test;
|
||||||
GRANT ALL ON TABLE insertable_view_with_join TO postgrest_test;
|
GRANT ALL ON TABLE insertable_view_with_join TO postgrest_test;
|
||||||
|
|||||||
Reference in New Issue
Block a user