Skip to content

test(plugin-iceberg): Test for alter column types for Iceberg#27744

Closed
hantangwangd wants to merge 4 commits into
prestodb:masterfrom
hantangwangd:test_for_alter_column_types_iceberg
Closed

test(plugin-iceberg): Test for alter column types for Iceberg#27744
hantangwangd wants to merge 4 commits into
prestodb:masterfrom
hantangwangd:test_for_alter_column_types_iceberg

Conversation

@hantangwangd
Copy link
Copy Markdown
Member

@hantangwangd hantangwangd commented May 7, 2026

Description

[DNM] Just test for alter column types for Iceberg

Motivation and Context

Impact

Test Plan

Contributor checklist

  • Please make sure your submission complies with our contributing guide, in particular code style and commit standards.
  • PR description addresses the issue accurately and concisely. If the change is non-trivial, a GitHub Issue is referenced.
  • Documented new properties (with its default value), SQL syntax, functions, or other functionality.
  • If release notes are required, they follow the release notes guidelines.
  • Adequate tests were added if applicable.
  • CI passed.
  • If adding new dependencies, verified they have an OpenSSF Scorecard score of 5.0 or higher (or obtained explicit TSC approval for lower scores).

Release Notes

== NO RELEASE NOTE ==

Summary by Sourcery

Add support for ALTER TABLE ... ALTER COLUMN SET DATA TYPE, including metadata, access control, execution logic, and Iceberg implementation.

New Features:

  • Introduce a SetColumnType statement, parser support, formatter, and execution task to change column types via ALTER TABLE.
  • Add connector-level support for setColumnType in metadata SPI and implement it for Iceberg, BlackHole, testing metadata, and mock connectors.
  • Extend access control APIs and implementations to authorize ALTER COLUMN operations at system and connector levels.
  • Support REAL-to-DOUBLE and short-to-long DECIMAL read paths in ORC and Parquet readers to handle column type changes.
  • Add distributed and unit tests covering ALTER COLUMN behavior, access control, parser/AST, and Iceberg-specific alter column scenarios.

Enhancements:

  • Relax show-create-table test utility to optionally skip property validation and handle schemas with dotted identifiers.
  • Expose LongDecimalType publicly and adjust DoubleType to interpret legacy float-backed blocks for type-coercion scenarios.
  • Record statistics for setColumnType calls in metadata and system access control stats.
  • Update statement classification and data definition binding to treat SetColumnType as a DDL operation.

Tests:

  • Add IcebergDistributedSmokeTestBase coverage for altering column types across file formats and validating schema and data.
  • Add TestSetColumnTypeTask to verify column type changes, error handling, and IF EXISTS semantics.
  • Extend parser and statement builder tests for ALTER TABLE ... ALTER COLUMN SET DATA TYPE syntax.
  • Strengthen access control tests to cover ALTER COLUMN permissions and file-based access control rules.

@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented May 7, 2026

Reviewer's Guide

Implements ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE support end-to-end (parser, analyzer, execution, metadata, access control, connector plumbing) and adds Iceberg integration and tests, including type-coercion handling for REAL→DOUBLE and DECIMAL widening across ORC/Parquet, plus new stats wiring and utility fixes.

Sequence diagram for ALTER TABLE ALTER COLUMN SET DATA TYPE execution path

sequenceDiagram
    actor User
    participant Coordinator
    participant SqlParser
    participant AstBuilder
    participant StatementAnalyzer
    participant ExecutionPlanner
    participant SetColumnTypeTask
    participant AccessControlManager
    participant MetadataManager
    participant ConnectorMetadata
    participant IcebergMetadata

    User->>Coordinator: submit ALTER TABLE t ALTER COLUMN c SET DATA TYPE new_type
    Coordinator->>SqlParser: parse(sql)
    SqlParser->>AstBuilder: build AST
    AstBuilder-->>Coordinator: SetColumnType node

    Coordinator->>StatementAnalyzer: analyze(SetColumnType)
    StatementAnalyzer-->>Coordinator: analysis complete

    Coordinator->>ExecutionPlanner: plan DDL(SetColumnType)
    ExecutionPlanner->>SetColumnTypeTask: execute(statement, session)

    SetColumnTypeTask->>MetadataManager: getMetadataResolver(session)
    MetadataManager-->>SetColumnTypeTask: resolver
    SetColumnTypeTask->>MetadataManager: getTableHandle(tableName)
    MetadataManager-->>SetColumnTypeTask: Optional TableHandle
    SetColumnTypeTask->>MetadataManager: getMaterializedView(tableName)
    MetadataManager-->>SetColumnTypeTask: Optional MaterializedViewDefinition

    SetColumnTypeTask->>AccessControlManager: checkCanAlterColumn(transactionId, identity, context, tableName)
    AccessControlManager->>SystemAccessControl: checkCanAlterColumn(identity, context, catalogSchemaTableName)
    SystemAccessControl-->>AccessControlManager: allowed or throws
    AccessControlManager->>ConnectorAccessControl: checkCanAlterColumn(transactionHandle, connectorIdentity, context, schemaTableName)
    ConnectorAccessControl-->>AccessControlManager: allowed or throws
    AccessControlManager-->>SetColumnTypeTask: authorization result

    SetColumnTypeTask->>MetadataManager: getColumnHandles(session, tableHandle)
    MetadataManager-->>SetColumnTypeTask: Map columnName to ColumnHandle
    SetColumnTypeTask->>MetadataManager: setColumnType(session, tableHandle, columnHandle, Type)

    MetadataManager->>ConnectorMetadata: setColumnType(connectorSession, connectorTableHandle, columnHandle, Type)
    ConnectorMetadata->>IcebergMetadata: setColumnType(session, tableHandle, columnHandle, Type)
    IcebergMetadata->>IcebergMetadata: getIcebergTable(schemaTableName)
    IcebergMetadata->>IcebergMetadata: updateSchema().updateColumn(name, icebergType).commit()
    IcebergMetadata-->>ConnectorMetadata: success
    ConnectorMetadata-->>MetadataManager: success
    MetadataManager-->>SetColumnTypeTask: success
    SetColumnTypeTask-->>ExecutionPlanner: immediateFuture(null)
    ExecutionPlanner-->>Coordinator: task complete
    Coordinator-->>User: DDL succeeded
Loading

Class diagram for SetColumnType statement and task

classDiagram
    class Statement {
        <<abstract>>
    }

    class SetColumnType {
        +QualifiedName tableName
        +Identifier columnName
        +String type
        +boolean tableExists
        +SetColumnType(NodeLocation location, QualifiedName tableName, Identifier columnName, String type, boolean tableExists)
        +QualifiedName getTableName()
        +Identifier getColumnName()
        +String getType()
        +boolean isTableExists()
        +<R, C> R accept(AstVisitor visitor, C context)
    }

    class AstVisitor {
        +R visitSetColumnType(SetColumnType node, C context)
    }

    class AstBuilder {
        +Node visitSetColumnType(SqlBaseParser_SetColumnTypeContext context)
    }

    class SqlFormatter_Visitor {
        +Void visitSetColumnType(SetColumnType node, Integer context)
    }

    class StatementAnalyzer_Visitor {
        +Scope visitSetColumnType(SetColumnType node, Optional scope)
    }

    class SqlBase_grammar {
        +rule setColumnType
    }

    class StatementUtils {
        +Map statementQueryTypes
    }

    class PrestoDataDefBindingHelper {
        +Map dataDefBuilder
    }

    class DDLDefinitionTask~T~ {
        <<interface>>
        +String getName()
    }

    class SetColumnTypeTask {
        -Metadata metadata
        +SetColumnTypeTask(Metadata metadata)
        +String getName()
        +ListenableFuture execute(SetColumnType statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, Session session, List parameters, WarningCollector warningCollector, String query)
        -Type getColumnType(SetColumnType statement)
    }

    class Metadata {
        <<interface>>
        +Optional getMetadataResolver(Session session)
        +Map getColumnHandles(Session session, TableHandle tableHandle)
        +void setColumnType(Session session, TableHandle tableHandle, ColumnHandle column, Type type)
    }

    class MetadataManager {
        +void setColumnType(Session session, TableHandle tableHandle, ColumnHandle column, Type type)
    }

    class StatsRecordingMetadataManager {
        +void setColumnType(Session session, TableHandle tableHandle, ColumnHandle column, Type type)
        +MetadataManagerStats stats
    }

    class MetadataManagerStats {
        -AtomicLong setColumnTypeCalls
        -TimeStat setColumnTypeTime
        +void recordSetColumnTypeCall(long duration)
    }

    class RemoteMetadataManager {
        +void setColumnType(Session session, TableHandle tableHandle, ColumnHandle column, Type type)
    }

    class TestingMetadata {
        +void setColumnType(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle column, Type type)
    }

    Statement <|-- SetColumnType
    AstVisitor <|-- AstBuilder
    AstVisitor <|-- SqlFormatter_Visitor
    AstVisitor <|-- StatementAnalyzer_Visitor

    SqlBase_grammar --> SetColumnType : produces
    AstBuilder --> SetColumnType : constructs
    SqlFormatter_Visitor --> SetColumnType : formats
    StatementAnalyzer_Visitor --> SetColumnType : analyzes

    DDLDefinitionTask <|.. SetColumnTypeTask
    SetColumnTypeTask --> Metadata : uses
    SetColumnTypeTask --> AccessControl : uses

    Metadata <|.. MetadataManager
    MetadataManager <|.. StatsRecordingMetadataManager
    Metadata <|.. RemoteMetadataManager
    Metadata <|.. TestingMetadata

    StatsRecordingMetadataManager --> MetadataManagerStats
Loading

Class diagram for access control and connector metadata changes for ALTER COLUMN

classDiagram
    class AccessControl {
        <<interface>>
        +void checkCanDropColumn(TransactionId transactionId, Identity identity, AccessControlContext context, QualifiedObjectName tableName)
        +void checkCanAlterColumn(TransactionId transactionId, Identity identity, AccessControlContext context, QualifiedObjectName tableName)
    }

    class AccessControlManager {
        +void checkCanAlterColumn(TransactionId transactionId, Identity identity, AccessControlContext context, QualifiedObjectName tableName)
    }

    class SystemAccessControl {
        <<interface>>
        +void checkCanDropSchema(Identity identity, AccessControlContext context, CatalogSchemaName schema)
        +void checkCanAlterColumn(Identity identity, AccessControlContext context, CatalogSchemaTableName table)
    }

    class AllowAllSystemAccessControl {
        +void checkCanAlterColumn(Identity identity, AccessControlContext context, CatalogSchemaTableName table)
    }

    class FileBasedSystemAccessControl {
        +void checkCanAlterColumn(Identity identity, AccessControlContext context, CatalogSchemaTableName table)
    }

    class StatsRecordingSystemAccessControl {
        +void checkCanAlterColumn(Identity identity, AccessControlContext context, CatalogSchemaTableName table)
        +Stats stats
    }

    class StatsRecordingSystemAccessControl_Stats {
        +SystemAccessControlStats checkCanAlterColumn
    }

    class ForwardingSystemAccessControl {
        +void checkCanAlterColumn(Identity identity, AccessControlContext context, CatalogSchemaTableName table)
    }

    class ConnectorAccessControl {
        <<interface>>
        +void checkCanAlterColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName)
    }

    class FileBasedAccessControl {
        +void checkCanAlterColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName)
    }

    class AllowAllAccessControl_connector {
        +void checkCanAlterColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName)
    }

    class ReadOnlyAccessControl {
        +void checkCanAlterColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName)
    }

    class LegacyAccessControl {
        +void checkCanAlterColumn(ConnectorTransactionHandle transaction, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName)
    }

    class ForwardingConnectorAccessControl {
        +void checkCanAlterColumn(ConnectorTransactionHandle transactionHandle, ConnectorIdentity identity, AccessControlContext context, SchemaTableName tableName)
    }

    class DenyAllAccessControl {
        +void checkCanAlterColumn(TransactionId transactionId, Identity identity, AccessControlContext context, QualifiedObjectName tableName)
    }

    class AllowAllAccessControl_spi {
        +void checkCanAlterColumn(TransactionId transactionId, Identity identity, AccessControlContext context, QualifiedObjectName tableName)
    }

    class TestingAccessControlManager {
        +void checkCanAlterColumn(TransactionId transactionId, Identity identity, AccessControlContext context, QualifiedObjectName tableName)
        enum TestingPrivilegeType
    }

    class TestingPrivilegeType {
        +ADD_COLUMN
        +DROP_COLUMN
        +RENAME_COLUMN
        +SELECT_COLUMN
        +ALTER_COLUMN
    }

    class AccessDeniedException {
        +static void denyAlterColumn(String tableName)
        +static void denyAlterColumn(String tableName, String extraInfo)
    }

    class ConnectorMetadata {
        <<interface>>
        +void setColumnType(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle column, Type type)
    }

    class ClassLoaderSafeConnectorMetadata {
        +void setColumnType(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle, Type type)
    }

    class BlackHoleMetadata {
        +void setColumnType(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle, Type type)
    }

    class IcebergAbstractMetadata {
        +void setColumnType(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle, Type type)
    }

    class TestingMetadata_connector {
        +void setColumnType(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle column, Type type)
    }

    AccessControlManager ..|> AccessControl
    AllowAllAccessControl_spi ..|> AccessControl
    DenyAllAccessControl ..|> AccessControl
    TestingAccessControlManager ..|> AccessControl

    AllowAllSystemAccessControl ..|> SystemAccessControl
    FileBasedSystemAccessControl ..|> SystemAccessControl
    StatsRecordingSystemAccessControl ..|> SystemAccessControl
    ForwardingSystemAccessControl ..|> SystemAccessControl

    StatsRecordingSystemAccessControl --> StatsRecordingSystemAccessControl_Stats

    FileBasedAccessControl ..|> ConnectorAccessControl
    AllowAllAccessControl_connector ..|> ConnectorAccessControl
    ReadOnlyAccessControl ..|> ConnectorAccessControl
    LegacyAccessControl ..|> ConnectorAccessControl
    ForwardingConnectorAccessControl ..|> ConnectorAccessControl

    TestingAccessControlManager --> TestingPrivilegeType

    ConnectorMetadata <|.. ClassLoaderSafeConnectorMetadata
    ConnectorMetadata <|.. BlackHoleMetadata
    ConnectorMetadata <|.. IcebergAbstractMetadata
    ConnectorMetadata <|.. TestingMetadata_connector

    AccessControlManager --> SystemAccessControl
    AccessControlManager --> ConnectorAccessControl

    SystemAccessControl --> AccessDeniedException
    ConnectorAccessControl --> AccessDeniedException
    ReadOnlyAccessControl --> AccessDeniedException
    FileBasedAccessControl --> AccessDeniedException

    ClassLoaderSafeConnectorMetadata --> ConnectorMetadata
    BlackHoleMetadata --> ConnectorMetadata
    IcebergAbstractMetadata --> ConnectorMetadata
    TestingMetadata_connector --> ConnectorMetadata
Loading

File-Level Changes

Change Details Files
Add end-to-end support for ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE, including parser AST, analyzer wiring, execution task, metadata API, access control, and connector delegations.
  • Introduce SetColumnType AST node, SQL grammar rule, parser/formatter support, and statement classification
  • Wire SetColumnType through analyzer, StatementUtils, and PrestoDataDefBindingHelper to a new SetColumnTypeTask
  • Implement SetColumnTypeTask to resolve table/column, enforce access control, validate target type, and call metadata.setColumnType
  • Extend Metadata and MetadataManager with setColumnType, plus stats recording and RemoteMetadataManager no-op implementation
  • Propagate setColumnType into ConnectorMetadata SPI and ClassLoaderSafeConnectorMetadata, and implement minimal behavior in TestingMetadata, MockMetadata, BlackHoleMetadata, MockConnectorFactory, and IcebergAbstractMetadata
presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4
presto-parser/src/main/java/com/facebook/presto/sql/parser/AstBuilder.java
presto-parser/src/main/java/com/facebook/presto/sql/tree/SetColumnType.java
presto-parser/src/main/java/com/facebook/presto/sql/tree/AstVisitor.java
presto-parser/src/main/java/com/facebook/presto/sql/SqlFormatter.java
presto-analyzer/src/main/java/com/facebook/presto/sql/analyzer/utils/StatementUtils.java
presto-main-base/src/main/java/com/facebook/presto/util/PrestoDataDefBindingHelper.java
presto-main-base/src/main/java/com/facebook/presto/execution/SetColumnTypeTask.java
presto-main-base/src/main/java/com/facebook/presto/metadata/Metadata.java
presto-main-base/src/main/java/com/facebook/presto/metadata/MetadataManager.java
presto-main-base/src/main/java/com/facebook/presto/metadata/MetadataManagerStats.java
presto-main-base/src/main/java/com/facebook/presto/metadata/StatsRecordingMetadataManager.java
presto-main-base/src/main/java/com/facebook/presto/catalogserver/RemoteMetadataManager.java
presto-spi/src/main/java/com/facebook/presto/spi/connector/ConnectorMetadata.java
presto-spi/src/main/java/com/facebook/presto/spi/connector/classloader/ClassLoaderSafeConnectorMetadata.java
presto-main-base/src/main/java/com/facebook/presto/testing/TestingMetadata.java
presto-main-base/src/test/java/com/facebook/presto/metadata/AbstractMockMetadata.java
presto-main-base/src/test/java/com/facebook/presto/execution/TestSetColumnTypeTask.java
presto-blackhole/src/main/java/com/facebook/presto/plugin/blackhole/BlackHoleMetadata.java
presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergAbstractMetadata.java
presto-main-base/src/test/java/com/facebook/presto/connector/MockConnectorFactory.java
Add access control surface and enforcement for ALTER COLUMN operations at both system and connector levels, including stats recording and testing.
  • Extend AccessControl and SystemAccessControl SPI with checkCanAlterColumn, plus default deny/allow implementations
  • Wire checkCanAlterColumn through AccessControlManager, StatsRecordingSystemAccessControl, TestingAccessControlManager, and TestingPrivilegeType
  • Implement connector-level checkCanAlterColumn in SqlStandardAccessControl, FileBasedAccessControl, Forwarding*AccessControl, ReadOnly/DenyAll/AllowAll access controls, and LegacyAccessControl
  • Add non-query access control tests for ALTER COLUMN and extend file-based access control tests for alter-column rules
  • Add new AccessDeniedException helpers and Iceberg-specific error code for incompatible column types
presto-spi/src/main/java/com/facebook/presto/spi/security/AccessControl.java
presto-spi/src/main/java/com/facebook/presto/spi/security/SystemAccessControl.java
presto-main-base/src/main/java/com/facebook/presto/security/AccessControlManager.java
presto-main-base/src/main/java/com/facebook/presto/security/StatsRecordingSystemAccessControl.java
presto-main-base/src/main/java/com/facebook/presto/security/FileBasedSystemAccessControl.java
presto-main-base/src/main/java/com/facebook/presto/testing/TestingAccessControlManager.java
presto-main-base/src/main/java/com/facebook/presto/testing/TestingMetadata.java
presto-main-base/src/test/java/com/facebook/presto/tests/AbstractTestDistributedQueries.java
presto-plugin-toolkit/src/main/java/com/facebook/presto/plugin/base/security/FileBasedAccessControl.java
presto-plugin-toolkit/src/main/java/com/facebook/presto/plugin/base/security/ForwardingConnectorAccessControl.java
presto-plugin-toolkit/src/main/java/com/facebook/presto/plugin/base/security/ForwardingSystemAccessControl.java
presto-plugin-toolkit/src/main/java/com/facebook/presto/plugin/base/security/AllowAllAccessControl.java
presto-plugin-toolkit/src/main/java/com/facebook/presto/plugin/base/security/ReadOnlyAccessControl.java
presto-plugin-toolkit/src/test/java/com/facebook/presto/plugin/base/security/TestFileBasedAccessControl.java
presto-spi/src/main/java/com/facebook/presto/spi/security/AllowAllAccessControl.java
presto-spi/src/main/java/com/facebook/presto/spi/security/DenyAllAccessControl.java
presto-spi/src/main/java/com/facebook/presto/spi/security/AccessDeniedException.java
presto-hive/src/main/java/com/facebook/presto/hive/security/SqlStandardAccessControl.java
presto-hive/src/main/java/com/facebook/presto/hive/security/LegacyAccessControl.java
presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergErrorCode.java
Support REAL→DOUBLE and DECIMAL-short→DECIMAL-long coercions at ORC/Parquet reader layer and adjust type classes, to allow ALTER COLUMN type changes to be readable.
  • Update FloatBatchStreamReader and FloatInputStream to accept either REAL or DOUBLE types and convert float values appropriately, including null handling via the dynamic type
  • Update ShortDecimalColumnReader to write to LongDecimalType when needed and make LongDecimalType public and tolerant of long-backed blocks
  • Adjust DoubleType.getObjectValue to handle IntArrayBlock representing floats as doubles
  • Add necessary imports and instance fields to support the above conversions
presto-orc/src/main/java/com/facebook/presto/orc/reader/FloatBatchStreamReader.java
presto-orc/src/main/java/com/facebook/presto/orc/stream/FloatInputStream.java
presto-parquet/src/main/java/com/facebook/presto/parquet/reader/ShortDecimalColumnReader.java
presto-common/src/main/java/com/facebook/presto/common/type/LongDecimalType.java
presto-common/src/main/java/com/facebook/presto/common/type/DoubleType.java
Enhance Iceberg and general test coverage for ALTER COLUMN type behavior, including Iceberg smoke tests, parser/formatter tests, and SetColumnType task tests.
  • Add IcebergDistributedSmokeTestBase.testAlterColumnType to create a table in all file formats, alter various column types, validate SHOW CREATE, and assert data and failure behavior including incompatible type errors
  • Make validateShowCreateTable robust to schemas with dots and optional propertyDescriptions
  • Add parser tests and statement builder output for ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE
  • Introduce TestSetColumnTypeTask with a MockMetadata implementation verifying setColumnType, IF EXISTS behavior, and non-existent column/table cases
presto-iceberg/src/test/java/com/facebook/presto/iceberg/IcebergDistributedSmokeTestBase.java
presto-main-base/src/test/java/com/facebook/presto/metadata/AbstractMockMetadata.java
presto-main-base/src/test/java/com/facebook/presto/execution/TestSetColumnTypeTask.java
presto-parser/src/test/java/com/facebook/presto/sql/parser/TestSqlParser.java
presto-parser/src/test/java/com/facebook/presto/sql/parser/TestStatementBuilder.java

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@hantangwangd hantangwangd force-pushed the test_for_alter_column_types_iceberg branch from 9e98473 to f7878bc Compare May 11, 2026 08:54
@linux-foundation-easycla
Copy link
Copy Markdown

CLA Missing ID CLA Not Signed

  • ✅ login: hantangwangd / name: wangd (4447446, f7878bc)
  • ✅ login: NivinCS / name: Nivin C S (f37cfdd)
  • ❌ The email address for the commit (7845378) is not linked to the GitHub account, preventing the EasyCLA check. Consult this Help Article and GitHub Help to resolve. (To view the commit's email address, add .patch at the end of this PR page's URL.) For further assistance with EasyCLA, please visit our EasyCLA portal and chat with our support bot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants