{"record":{"id":"44ac7f05eec444d2","repo":"apache/cassandra","slug":"altering-column-types-is-no-longer-supported","errorCode":null,"errorMessage":"Altering column types is no longer supported","messagePattern":"Altering column types is no longer supported","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/AlterTableStatement.java","lineNumber":180,"sourceCode":"    }\n\n    abstract KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata);\n\n    /**\n     * {@code ALTER TABLE [IF EXISTS] <table> ALTER <column> TYPE <newtype>;}\n     *\n     * No longer supported.\n     */\n    public static class AlterColumn extends AlterTableStatement\n    {\n        AlterColumn(String keyspaceName, String tableName, boolean ifTableExists)\n        {\n            super(keyspaceName, tableName, ifTableExists);\n        }\n\n        public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata)\n        {\n            throw ire(\"Altering column types is no longer supported\");\n        }\n\n        @Override\n        public boolean compatibleWith(ClusterMetadata metadata)\n        {\n            return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);\n        }\n    }\n\n    /**\n     * {@code ALTER TABLE [IF EXISTS] <table> ALTER [IF EXISTS] <column> ( MASKED WITH <newMask> | DROP MASKED )}\n     */\n    public static class MaskColumn extends AlterTableStatement\n    {\n        private final ColumnIdentifier columnName;\n        @Nullable\n        private final ColumnMask.Raw rawMask;\n        private final boolean ifColumnExists;","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/AlterTableStatement.java#L162-L198","documentation":"ALTER TABLE ... ALTER columnname TYPE ... (changing a column's type) is no longer supported in modern Cassandra. The AlterTableStatement.TypeChange.apply is a stub that unconditionally throws this InvalidRequestException regardless of input.","triggerScenarios":"Executing 'ALTER TABLE ks.tbl ALTER col TYPE <newtype>' — the legacy type-change syntax; any code path mapped to the TypeChange sub-statement fires this on apply","commonSituations":"Upgrading from very old Cassandra (0.7/1.x era where type changes were briefly allowed); porting legacy migration scripts; following outdated tutorials or ORM-generated DDL that emits ALTER TYPE.","solutions":["Remove the ALTER TYPE statement; migrate data manually instead: add a new column of the desired type, backfill, then drop the old column","Recreate the table with correct types and copy data (e.g. via COPY or a Spark job)","Validate client drivers/ORMs do not emit ALTER ... TYPE during upgrades"],"exampleFix":"// before\nsession.execute(\"ALTER TABLE my_app.events ALTER payload TYPE blob\");\n// after\nsession.execute(\"ALTER TABLE my_app.events ADD payload_v2 blob\");\n// backfill payload_v2 from payload, then: ALTER TABLE my_app.events DROP payload;","handlingStrategy":"validation","validationCode":"if (alterStmt.trim().toLowerCase().matches(\"alter table \\\\S+ alter \\\\S+ type \\\\S+\"))\n    throw new UnsupportedOperationException(\"Column type changes are unsupported; migrate data manually\");","typeGuard":null,"tryCatchPattern":"try {\n    session.execute(alter);\n} catch (InvalidRequestException e) {\n    if (e.getMessage().equals(\"Altering column types is no longer supported\"))\n        log.error(\"Rewrite migration: use add-new-column + backfill + drop-old-column\");\n    else throw e;\n}","preventionTips":["Replace ALTER TYPE in legacy scripts with add/backfill/drop pattern","Audit ORM/driver-generated DDL for ALTER ... TYPE","Test old migrations against modern Cassandra versions before rollout"],"tags":["cassandra","cql","ddl","deprecated"],"backgroundTag":"deprecated-api-usage","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}