diff --git a/src/query/sql/src/planner/binder/ddl/view.rs b/src/query/sql/src/planner/binder/ddl/view.rs index 87ae93a1b6eec..5b49183a267f5 100644 --- a/src/query/sql/src/planner/binder/ddl/view.rs +++ b/src/query/sql/src/planner/binder/ddl/view.rs @@ -32,7 +32,6 @@ use crate::SelectBuilder; use crate::ViewRewriter; use crate::binder::Binder; use crate::planner::semantic::normalize_identifier; -use crate::plans::AlterViewPlan; use crate::plans::CreateViewPlan; use crate::plans::DescribeViewPlan; use crate::plans::DropViewPlan; @@ -84,37 +83,14 @@ impl Binder { &mut self, stmt: &AlterViewStmt, ) -> Result { - let AlterViewStmt { - catalog, - database, - view, - columns, - query, - } = stmt; - - let mut query = *query.clone(); - let tenant = self.ctx.get_tenant(); - let (catalog, database, view_name) = - self.normalize_object_identifier_triple(catalog, database, view); - let column_names = columns - .iter() - .map(|ident| normalize_identifier(ident, &self.name_resolution_ctx).name) - .collect::>(); - let mut visitor = ViewRewriter { - current_database: database.clone(), - }; - query.walk_mut(&mut visitor)?; - let subquery = format!("{}", query); - - let plan = AlterViewPlan { - tenant, - catalog, - database, - view_name, - column_names, - subquery, - }; - Ok(Plan::AlterView(plan.into())) + let _ = stmt; + // View dependencies are tracked from the stored query. Changing the + // definition or output columns in place would require rewriting lineage + // metadata and makes rename/restore semantics harder to reason about. + // TODO: support ALTER VIEW RENAME TO . + Err(databend_common_exception::ErrorCode::Unimplemented( + "ALTER VIEW does not support changing the view query", + )) } #[async_backtrace::framed] diff --git a/tests/sqllogictests/suites/base/05_ddl/05_0019_ddl_create_view.test b/tests/sqllogictests/suites/base/05_ddl/05_0019_ddl_create_view.test index 569d08380c622..8eb4c0e2d7f32 100644 --- a/tests/sqllogictests/suites/base/05_ddl/05_0019_ddl_create_view.test +++ b/tests/sqllogictests/suites/base/05_ddl/05_0019_ddl_create_view.test @@ -195,16 +195,9 @@ select * from rv_v3; ---- 1 -# Test: circular dependency via ALTER VIEW should also fail -# Reuse rv_v1 -> rv_v2 -> rv_v3 chain - -# Direct self-reference via ALTER VIEW -statement error 1029 -alter view rv_v1 as select * from rv_v1; - -# Circular: rv_v1 -> rv_v3 -> rv_v2 -> rv_v1 -statement error 1029 -alter view rv_v1 as select * from rv_v3; +# ALTER VIEW query changes are rejected. +statement error +alter view rv_v3 as select * from rv_v1; # Verify views still work after failed ALTER attempts query I diff --git a/tests/sqllogictests/suites/base/05_ddl/05_0021_ddl_alter_view.test b/tests/sqllogictests/suites/base/05_ddl/05_0021_ddl_alter_view.test deleted file mode 100644 index c4cc03d34c059..0000000000000 --- a/tests/sqllogictests/suites/base/05_ddl/05_0021_ddl_alter_view.test +++ /dev/null @@ -1,75 +0,0 @@ -statement ok -DROP VIEW IF EXISTS tmp_view - -statement ok -CREATE VIEW tmp_view AS SELECT number % 3 AS a, avg(number) FROM numbers(1000) GROUP BY a ORDER BY a - -query IR -SELECT * FROM tmp_view ----- -0 499.5 -1 499.0 -2 500.0 - -statement ok -ALTER VIEW tmp_view AS SELECT number from numbers(3) ORDER BY number - -query I -SELECT * FROM tmp_view ----- -0 -1 -2 - -query TTTTT -DESCRIBE tmp_view; ----- -number BIGINT UNSIGNED NO NULL (empty) - -statement ok -ALTER VIEW tmp_view(c1) AS SELECT * from numbers(3) - -query TTTTT -DESCRIBE tmp_view; ----- -c1 BIGINT UNSIGNED NO NULL (empty) - -statement error 1018 -ALTER VIEW tmp_view(c1) AS SELECT number % 3 AS a, avg(number) FROM numbers(1000) GROUP BY a ORDER BY a - -statement ok -DROP VIEW IF EXISTS tmp_view - -statement ok -drop view if exists v_t; - -statement error 1026 -alter view v_t as select 1; - -statement ok -create table t (id int) - -statement ok -create view v_t as select * from system.columns; - -statement ok -use system - -query TT -show create table default.v_t; ----- -v_t CREATE VIEW `default`.`v_t` AS SELECT * FROM system.columns - -statement ok -alter view default.v_t as select * from t; - -query TT -show create table default.v_t; ----- -v_t CREATE VIEW `default`.`v_t` AS SELECT * FROM default.t - -statement ok -drop view default.v_t; - -statement ok -drop table default.t;