{"record":{"id":"6e03a17886c66c3e","repo":"apache/cassandra","slug":"invalid-field-deletion-operation-for-non-udt-colum","errorCode":null,"errorMessage":"Invalid field deletion operation for non-UDT column %s","messagePattern":"Invalid field deletion operation for non-UDT column (.+?)","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/Operation.java","lineNumber":563,"sourceCode":"    {\n        private final ColumnIdentifier id;\n        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":545,"sourceCodeEnd":574,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/Operation.java#L545-L574","documentation":"A UDT field deletion (`DELETE col.field FROM t`) was issued against a column that is not a user-defined type. Field-level deletes only apply to non-frozen UDT columns, so prepare rejects non-UDT receivers.","triggerScenarios":"`DELETE address.city FROM t` where address is not a UDT (scalar or collection); typo in the column name.","commonSituations":"Confusing nested syntax across column kinds; schema drift where the UDT was replaced by a simpler type; copy-pasted statements between tables.","solutions":["Confirm the target column is a non-frozen UDT with DESCRIBE TYPE / DESCRIBE TABLE","Delete the whole column (DELETE col FROM t) and rewrite it without the field if it is not a UDT","Fix the column name if a typo was made","Note frozen UDTs do not support field deletions either — use full-value replacement there"],"exampleFix":"// before (address is frozen UDT / text)\nDELETE address.city FROM t WHERE id=1;\n// after (non-frozen UDT)\nDELETE address.city FROM t WHERE id=1;\n// or full replacement for frozen:\nUPDATE t SET address = {city:'X', zip:'Y'} WHERE id=1;","handlingStrategy":"validation","validationCode":"String type = session.execute(\"SELECT type FROM system_schema.columns WHERE keyspace_name=? AND table_name=? AND column_name=?\", ks, table, col).one().getString(\"type\");\nif (type.contains(\"<\") && !type.startsWith(\"frozen<\")) { /* UDT check */ }\n// confirm a UDT of this name exists:\nsession.execute(\"SELECT field_names FROM system_schema.types WHERE keyspace_name=? AND type_name=?\", ks, udtName);","typeGuard":null,"tryCatchPattern":"try { session.execute(\"DELETE col.field FROM t WHERE id=?\", id); } catch (InvalidQueryException e) { if (e.getMessage().contains(\"non-UDT column\")) { /* fix column or delete whole column */ } else throw e; }","preventionTips":["Only use col.field delete syntax on non-frozen UDT columns","Verify UDT definitions and column types before field-level DML","Beware frozen UDTs: they need full-value replacement, not field deletes"],"tags":["cql","udt","delete","schema"],"backgroundTag":"unsupported-operation","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}