Skip to content

Commit 185cadd

Browse files
committed
refactor: remove _grant_object_kind from redshift as object_type /
for grants / revoke statements are optional
1 parent 480eedf commit 185cadd

File tree

3 files changed

+21
-48
lines changed

3 files changed

+21
-48
lines changed

sqlmesh/core/engine_adapter/postgres.py

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from functools import cached_property, partial
77
from sqlglot import exp
88

9-
from sqlmesh.core.engine_adapter.shared import DataObjectType
109
from sqlmesh.core.engine_adapter.base_postgres import BasePostgresEngineAdapter
1110
from sqlmesh.core.engine_adapter.mixins import (
1211
GetCurrentCatalogFromFunctionMixin,
@@ -19,7 +18,7 @@
1918

2019
if t.TYPE_CHECKING:
2120
from sqlmesh.core._typing import TableName
22-
from sqlmesh.core.engine_adapter._typing import DF, GrantsConfig, QueryOrDF
21+
from sqlmesh.core.engine_adapter._typing import DF, QueryOrDF
2322

2423
logger = logging.getLogger(__name__)
2524

@@ -142,21 +141,3 @@ def server_version(self) -> t.Tuple[int, int]:
142141
if match:
143142
return int(match.group(1)), int(match.group(2))
144143
return 0, 0
145-
146-
def _apply_grants_config_expr(
147-
self,
148-
table: exp.Table,
149-
grants_config: GrantsConfig,
150-
table_type: DataObjectType = DataObjectType.TABLE,
151-
) -> t.List[exp.Expression]:
152-
# https://www.postgresql.org/docs/current/sql-grant.html
153-
return self._dcl_grants_config_expr(exp.Grant, table, grants_config)
154-
155-
def _revoke_grants_config_expr(
156-
self,
157-
table: exp.Table,
158-
grants_config: GrantsConfig,
159-
table_type: DataObjectType = DataObjectType.TABLE,
160-
) -> t.List[exp.Expression]:
161-
# https://www.postgresql.org/docs/current/sql-revoke.html
162-
return self._dcl_grants_config_expr(exp.Revoke, table, grants_config)

sqlmesh/core/engine_adapter/redshift.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,6 @@ def _fetch_native_df(
167167
result = [tuple(row) for row in fetcheddata]
168168
return pd.DataFrame(result, columns=columns)
169169

170-
@staticmethod
171-
def _grant_object_kind(table_type: DataObjectType) -> str:
172-
if table_type == DataObjectType.MATERIALIZED_VIEW:
173-
return "MATERIALIZED VIEW"
174-
return "TABLE"
175-
176170
def _create_table_from_source_queries(
177171
self,
178172
table_name: TableName,

tests/core/engine_adapter/test_redshift.py

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ def test_sync_grants_config(make_mocked_engine_adapter: t.Callable, mocker: Mock
105105

106106
sql_calls = to_sql_calls(adapter)
107107
assert len(sql_calls) == 4
108-
assert 'REVOKE SELECT ON TABLE "test_schema"."test_table" FROM "old_user"' in sql_calls
109-
assert 'REVOKE UPDATE ON TABLE "test_schema"."test_table" FROM "legacy_user"' in sql_calls
110-
assert 'GRANT SELECT ON TABLE "test_schema"."test_table" TO "user1", "user2"' in sql_calls
111-
assert 'GRANT INSERT ON TABLE "test_schema"."test_table" TO "user3"' in sql_calls
108+
assert 'REVOKE SELECT ON "test_schema"."test_table" FROM "old_user"' in sql_calls
109+
assert 'REVOKE UPDATE ON "test_schema"."test_table" FROM "legacy_user"' in sql_calls
110+
assert 'GRANT SELECT ON "test_schema"."test_table" TO "user1", "user2"' in sql_calls
111+
assert 'GRANT INSERT ON "test_schema"."test_table" TO "user3"' in sql_calls
112112

113113

114114
def test_sync_grants_config_with_overlaps(
@@ -142,24 +142,23 @@ def test_sync_grants_config_with_overlaps(
142142

143143
sql_calls = to_sql_calls(adapter)
144144
assert len(sql_calls) == 3
145-
assert 'REVOKE SELECT ON TABLE "test_schema"."test_table" FROM "user_legacy"' in sql_calls
146-
assert 'GRANT SELECT ON TABLE "test_schema"."test_table" TO "user_new"' in sql_calls
147-
assert 'GRANT INSERT ON TABLE "test_schema"."test_table" TO "user_writer"' in sql_calls
145+
assert 'REVOKE SELECT ON "test_schema"."test_table" FROM "user_legacy"' in sql_calls
146+
assert 'GRANT SELECT ON "test_schema"."test_table" TO "user_new"' in sql_calls
147+
assert 'GRANT INSERT ON "test_schema"."test_table" TO "user_writer"' in sql_calls
148148

149149

150150
@pytest.mark.parametrize(
151-
"table_type, expected_keyword",
151+
"table_type",
152152
[
153-
(DataObjectType.TABLE, "TABLE"),
154-
(DataObjectType.VIEW, "TABLE"),
155-
(DataObjectType.MATERIALIZED_VIEW, "MATERIALIZED VIEW"),
153+
(DataObjectType.TABLE),
154+
(DataObjectType.VIEW),
155+
(DataObjectType.MATERIALIZED_VIEW),
156156
],
157157
)
158158
def test_sync_grants_config_object_kind(
159159
make_mocked_engine_adapter: t.Callable,
160160
mocker: MockerFixture,
161161
table_type: DataObjectType,
162-
expected_keyword: str,
163162
) -> None:
164163
adapter = make_mocked_engine_adapter(RedshiftEngineAdapter)
165164
relation = exp.to_table("test_schema.test_object", dialect="redshift")
@@ -169,9 +168,8 @@ def test_sync_grants_config_object_kind(
169168
adapter.sync_grants_config(relation, {"SELECT": ["user_test"]}, table_type)
170169

171170
sql_calls = to_sql_calls(adapter)
172-
assert sql_calls == [
173-
f'GRANT SELECT ON {expected_keyword} "test_schema"."test_object" TO "user_test"'
174-
]
171+
# we don't need to explicitly specify object_type for tables and views
172+
assert sql_calls == [f'GRANT SELECT ON "test_schema"."test_object" TO "user_test"']
175173

176174

177175
def test_sync_grants_config_quotes(make_mocked_engine_adapter: t.Callable, mocker: MockerFixture):
@@ -196,10 +194,10 @@ def test_sync_grants_config_quotes(make_mocked_engine_adapter: t.Callable, mocke
196194

197195
sql_calls = to_sql_calls(adapter)
198196
assert len(sql_calls) == 4
199-
assert 'REVOKE SELECT ON TABLE "TestSchema"."TestTable" FROM "user_old"' in sql_calls
200-
assert 'REVOKE UPDATE ON TABLE "TestSchema"."TestTable" FROM "user_legacy"' in sql_calls
201-
assert 'GRANT SELECT ON TABLE "TestSchema"."TestTable" TO "user1", "user2"' in sql_calls
202-
assert 'GRANT INSERT ON TABLE "TestSchema"."TestTable" TO "user3"' in sql_calls
197+
assert 'REVOKE SELECT ON "TestSchema"."TestTable" FROM "user_old"' in sql_calls
198+
assert 'REVOKE UPDATE ON "TestSchema"."TestTable" FROM "user_legacy"' in sql_calls
199+
assert 'GRANT SELECT ON "TestSchema"."TestTable" TO "user1", "user2"' in sql_calls
200+
assert 'GRANT INSERT ON "TestSchema"."TestTable" TO "user3"' in sql_calls
203201

204202

205203
def test_sync_grants_config_no_schema(
@@ -228,9 +226,9 @@ def test_sync_grants_config_no_schema(
228226

229227
sql_calls = to_sql_calls(adapter)
230228
assert len(sql_calls) == 3
231-
assert 'REVOKE UPDATE ON TABLE "test_table" FROM "user_old"' in sql_calls
232-
assert 'GRANT SELECT ON TABLE "test_table" TO "user1"' in sql_calls
233-
assert 'GRANT INSERT ON TABLE "test_table" TO "user2"' in sql_calls
229+
assert 'REVOKE UPDATE ON "test_table" FROM "user_old"' in sql_calls
230+
assert 'GRANT SELECT ON "test_table" TO "user1"' in sql_calls
231+
assert 'GRANT INSERT ON "test_table" TO "user2"' in sql_calls
234232

235233

236234
def test_create_table_from_query_exists_no_if_not_exists(

0 commit comments

Comments
 (0)