Fix ALTER COLUMN IF EXISTS runtime checks to handle column state changes #86046
+80
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes a bug where ALTER COLUMN commands with IF EXISTS clause would fail when column state changes between the validation and application phases within the same ALTER statement.
Problem
When multiple ALTER commands are executed in a single statement, some commands can change the metadata state (e.g., DROP COLUMN removes a column), causing subsequent commands in the same statement to fail even when using IF EXISTS clause.
This happens because:
validate()
phase, the column exists, soignore
flag remains falseapply()
phase, the column has been removed by a previous commandmetadata.columns.modify/remove/rename
methods throw exceptionsFor example:
Solution
should_skip_column_operation()
for consistent IF EXISTS runtime checkingapply()
methodsChangelog category (leave one):
Changelog entry (a user-readable short description of the changes that goes into CHANGELOG.md):
Fix ALTER COLUMN IF EXISTS commands failing when column state changes within the same ALTER statement. Commands like DROP COLUMN IF EXISTS, MODIFY COLUMN IF EXISTS, COMMENT COLUMN IF EXISTS, and RENAME COLUMN IF EXISTS now properly handle cases where a column is deleted by a previous command in the same statement.