{"record":{"id":"32446b47b36e07d6","repo":"apache/cassandra","slug":"frozen-udt-column-s-does-not-support-field-deleti","errorCode":null,"errorMessage":"Frozen UDT column %s does not support field deletions","messagePattern":"Frozen UDT column (.+?) does not support field deletions","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/Operation.java","lineNumber":565,"sourceCode":"        private final FieldIdentifier field;\n\n        public FieldDeletion(ColumnIdentifier id, FieldIdentifier field)\n        {\n            this.id = id;\n            this.field = field;\n        }\n\n        public ColumnIdentifier affectedColumn()\n        {\n            return id;\n        }\n\n        public Operation prepare(String keyspace, ColumnMetadata receiver, TableMetadata metadata) throws InvalidRequestException\n        {\n            if (!receiver.type.isUDT())\n                throw new InvalidRequestException(String.format(\"Invalid field deletion operation for non-UDT column %s\", receiver.name));\n            else if (!receiver.type.isMultiCell())\n                throw new InvalidRequestException(String.format(\"Frozen UDT column %s does not support field deletions\", receiver.name));\n\n            if (((UserType) receiver.type).fieldPosition(field) == -1)\n                throw new InvalidRequestException(String.format(\"UDT column %s does not have a field named %s\", receiver.name, field));\n\n            return new UserTypes.DeleterByField(receiver, field);\n        }\n    }\n}\n","sourceCodeStart":547,"sourceCodeEnd":574,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/Operation.java#L547-L574","documentation":"Cassandra's Operation.prepare() validates a DELETE of a UDT field against the column's type. Frozen UDTs are stored as a single non-multi-cell value, so individual fields cannot be deleted; only non-frozen (multi-cell) UDTs support field-level deletions. The error is raised at statement-preparation time, before execution.","triggerScenarios":"Executing a statement like DELETE address.street FROM users WHERE ... where the 'address' column is a frozen UDT (e.g. frozen<address>), or a non-UDT column passes the earlier check with isMultiCell() false.","commonSituations":"Schema migration made a UDT column frozen (or it was created frozen for compaction/performance reasons) while application code assumes non-frozen field-updatable semantics; copying CQL from a non-frozen table to a frozen one.","solutions":["Remove 'frozen<' from the UDT column definition and migrate: ALTER is not supported, so create a new non-frozen column/table and copy data, or","Replace the field deletion with a full frozen-value rewrite: UPDATE users SET address = <entire new UDT value> WHERE ..."],"exampleFix":"// before (frozen UDT)\naddress frozen<address>\nDELETE address.street FROM users WHERE id = 1; // fails\n// after (non-frozen UDT)\naddress address -- created without frozen<>\nDELETE address.street FROM users WHERE id = 1;","handlingStrategy":"validation","validationCode":"if (receiver.type.isUDT() && !receiver.type.isMultiCell()) throw new IllegalArgumentException(\"frozen UDT column \" + receiver.name + \" does not support field deletions\");","typeGuard":"boolean supportsFieldDelete = col.getType() instanceof UserType ut && ut.isMultiCell();","tryCatchPattern":"try { session.execute(deleteFieldStmt); } catch (InvalidRequestException e) { if (e.getMessage().contains(\"does not support field deletions\")) { /* rewrite whole value */ } }","preventionTips":["Avoid frozen<> for UDT columns that need per-field updates/deletes","Document UDT frozenness in schema conventions","Check isMultiCell() before generating field-level DML in codegen"],"tags":["cql","udt","frozen-type","unsupported-operation"],"backgroundTag":"unsupported-operation","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"}