Skip to content

Commit 7117b1f

Browse files
authored
feat(query): reject alter view definition changes (#20202)
feat(query): reject alter view query changes
1 parent 084d34d commit 7117b1f

3 files changed

Lines changed: 11 additions & 117 deletions

File tree

src/query/sql/src/planner/binder/ddl/view.rs

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use crate::SelectBuilder;
3232
use crate::ViewRewriter;
3333
use crate::binder::Binder;
3434
use crate::planner::semantic::normalize_identifier;
35-
use crate::plans::AlterViewPlan;
3635
use crate::plans::CreateViewPlan;
3736
use crate::plans::DescribeViewPlan;
3837
use crate::plans::DropViewPlan;
@@ -84,37 +83,14 @@ impl Binder {
8483
&mut self,
8584
stmt: &AlterViewStmt,
8685
) -> Result<Plan> {
87-
let AlterViewStmt {
88-
catalog,
89-
database,
90-
view,
91-
columns,
92-
query,
93-
} = stmt;
94-
95-
let mut query = *query.clone();
96-
let tenant = self.ctx.get_tenant();
97-
let (catalog, database, view_name) =
98-
self.normalize_object_identifier_triple(catalog, database, view);
99-
let column_names = columns
100-
.iter()
101-
.map(|ident| normalize_identifier(ident, &self.name_resolution_ctx).name)
102-
.collect::<Vec<_>>();
103-
let mut visitor = ViewRewriter {
104-
current_database: database.clone(),
105-
};
106-
query.walk_mut(&mut visitor)?;
107-
let subquery = format!("{}", query);
108-
109-
let plan = AlterViewPlan {
110-
tenant,
111-
catalog,
112-
database,
113-
view_name,
114-
column_names,
115-
subquery,
116-
};
117-
Ok(Plan::AlterView(plan.into()))
86+
let _ = stmt;
87+
// View dependencies are tracked from the stored query. Changing the
88+
// definition or output columns in place would require rewriting lineage
89+
// metadata and makes rename/restore semantics harder to reason about.
90+
// TODO: support ALTER VIEW <name> RENAME TO <new_name>.
91+
Err(databend_common_exception::ErrorCode::Unimplemented(
92+
"ALTER VIEW does not support changing the view query",
93+
))
11894
}
11995

12096
#[async_backtrace::framed]

tests/sqllogictests/suites/base/05_ddl/05_0019_ddl_create_view.test

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -195,16 +195,9 @@ select * from rv_v3;
195195
----
196196
1
197197

198-
# Test: circular dependency via ALTER VIEW should also fail
199-
# Reuse rv_v1 -> rv_v2 -> rv_v3 chain
200-
201-
# Direct self-reference via ALTER VIEW
202-
statement error 1029
203-
alter view rv_v1 as select * from rv_v1;
204-
205-
# Circular: rv_v1 -> rv_v3 -> rv_v2 -> rv_v1
206-
statement error 1029
207-
alter view rv_v1 as select * from rv_v3;
198+
# ALTER VIEW query changes are rejected.
199+
statement error
200+
alter view rv_v3 as select * from rv_v1;
208201

209202
# Verify views still work after failed ALTER attempts
210203
query I

tests/sqllogictests/suites/base/05_ddl/05_0021_ddl_alter_view.test

Lines changed: 0 additions & 75 deletions
This file was deleted.

0 commit comments

Comments
 (0)