diff --git a/server/src-lib/Hasura/RQL/DDL/Permission.hs b/server/src-lib/Hasura/RQL/DDL/Permission.hs index 07a1f30c..50505968 100644 --- a/server/src-lib/Hasura/RQL/DDL/Permission.hs +++ b/server/src-lib/Hasura/RQL/DDL/Permission.hs @@ -133,10 +133,13 @@ buildInsPermInfo tabInfo (PermDef rn (InsPerm chk set mCols) _) = (be, beDeps) <- withPathK "check" $ -- procBoolExp tn fieldInfoMap (S.QualVar "NEW") chk procBoolExp tn fieldInfoMap chk - let fltrHeaders = getDependentHeaders chk (setColsSQL, setHdrs, setColDeps) <- procSetObj tabInfo set - let reqHdrs = fltrHeaders `union` setHdrs - deps = mkParentDep tn : beDeps ++ setColDeps + void $ withPathK "columns" $ indexedForM insCols $ \col -> + askPGType fieldInfoMap col "" + let fltrHeaders = getDependentHeaders chk + reqHdrs = fltrHeaders `union` setHdrs + insColDeps = map (mkColDep "untyped" tn) insCols + deps = mkParentDep tn : beDeps ++ setColDeps ++ insColDeps insColsWithoutPresets = insCols \\ HM.keys setColsSQL return (InsPermInfo (HS.fromList insColsWithoutPresets) vn be setColsSQL reqHdrs, deps) where @@ -285,7 +288,7 @@ buildUpdPermInfo tabInfo (UpdPerm colSpec set fltr) = do (setColsSQL, setHeaders, setColDeps) <- procSetObj tabInfo set -- check if the columns exist - _ <- withPathK "columns" $ indexedForM updCols $ \updCol -> + void $ withPathK "columns" $ indexedForM updCols $ \updCol -> askPGType fieldInfoMap updCol relInUpdErr let updColDeps = map (mkColDep "untyped" tn) updCols diff --git a/server/tests-py/queries/v1/run_sql/setup.yaml b/server/tests-py/queries/v1/run_sql/setup.yaml index 64c35d34..920e16d4 100644 --- a/server/tests-py/queries/v1/run_sql/setup.yaml +++ b/server/tests-py/queries/v1/run_sql/setup.yaml @@ -6,7 +6,7 @@ args: args: sql: | create table author( - id serial primary key, + id serial primary key, name text unique ); insert into author (name) values ('Author 1'), ('Author 2'); @@ -20,7 +20,7 @@ args: ('article 1 by author 1', 'content for article 1', 1), ('article 2 by author 1', 'content for article 2', 1), ('article 1 by author 2', 'content for article 3', 2); - + - type: track_table args: schema: public @@ -71,3 +71,16 @@ args: permission: check: author_id: X-Hasura-User-Id + +#Article insert permission for user2 +- type: create_insert_permission + args: + table: article + role: user2 + permission: + columns: + - id + - title + - content + - author_id + check: {} diff --git a/server/tests-py/queries/v1/run_sql/sql_rename_columns.yaml b/server/tests-py/queries/v1/run_sql/sql_rename_columns_article.yaml similarity index 100% rename from server/tests-py/queries/v1/run_sql/sql_rename_columns.yaml rename to server/tests-py/queries/v1/run_sql/sql_rename_columns_article.yaml diff --git a/server/tests-py/queries/v1/run_sql/sql_rename_columns_author.yaml b/server/tests-py/queries/v1/run_sql/sql_rename_columns_author.yaml new file mode 100644 index 00000000..360e155e --- /dev/null +++ b/server/tests-py/queries/v1/run_sql/sql_rename_columns_author.yaml @@ -0,0 +1,69 @@ +#Rename columns +- url: /v1/query + status: 200 + query: + type: run_sql + args: + sql: | + alter table article rename column title to article_title; + +#Select Queries +- url: /v1/query + status: 200 + response: + - id: 1 + article_title: article 1 by author 1 + content: content for article 1 + author_id: 1 + - id: 2 + article_title: article 2 by author 1 + content: content for article 2 + author_id: 1 + - id: 3 + article_title: article 1 by author 2 + content: content for article 3 + author_id: 2 + query: + type: select + args: + table: article + columns: + - id + - article_title + - content + - author_id + +#Revert change +- url: /v1/query + status: 200 + query: + type: run_sql + args: + sql: | + alter table article rename column article_title to title; + +#Query post revert +- url: /v1/query + status: 200 + response: + - id: 1 + title: article 1 by author 1 + content: content for article 1 + author_id: 1 + - id: 2 + title: article 2 by author 1 + content: content for article 2 + author_id: 1 + - id: 3 + title: article 1 by author 2 + content: content for article 3 + author_id: 2 + query: + type: select + args: + table: article + columns: + - id + - title + - content + - author_id diff --git a/server/tests-py/test_v1_queries.py b/server/tests-py/test_v1_queries.py index 75f153dd..dc653220 100644 --- a/server/tests-py/test_v1_queries.py +++ b/server/tests-py/test_v1_queries.py @@ -492,8 +492,11 @@ class TestRunSQL(DefaultTestQueries): def test_sql_rename_table(self, hge_ctx): check_query_f(hge_ctx, self.dir() + '/sql_rename_table.yaml') - def test_sql_rename_columns(self, hge_ctx): - check_query_f(hge_ctx, self.dir() + '/sql_rename_columns.yaml') + def test_sql_rename_columns_article(self, hge_ctx): + check_query_f(hge_ctx, self.dir() + '/sql_rename_columns_article.yaml') + + def test_sql_rename_columns_author(self, hge_ctx): + check_query_f(hge_ctx, self.dir() + '/sql_rename_columns_author.yaml') def test_sql_rename_table_and_column(self, hge_ctx): check_query_f(hge_ctx, self.dir() + '/sql_rename_table_and_column.yaml')