{"record":{"id":"63b5d86272596833","repo":"apache/cassandra","slug":"unknown-field-s-for-column-s","errorCode":null,"errorMessage":"Unknown field %s for column %s","messagePattern":"Unknown field (.+?) for column (.+?)","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/ElementExpression.java","lineNumber":232,"sourceCode":"        {\n            if (kind == Kind.COLLECTION_ELEMENT)\n            {\n                AbstractType<?> baseType = column.type.unwrap();\n\n                if (!(baseType.isCollection()))\n                    throw invalidRequest(\"Invalid element access syntax for non-collection column %s\", column.name);\n\n                Term term = prepareCollectionElement(column);\n                CollectionType<?> collectionType = (CollectionType<?>) baseType;\n                AbstractType<?> elementType = collectionType.valueComparator();\n                AbstractType<?> keyOrIndexType = collectionType.isMap() ? ((MapType<?, ?>) collectionType).getKeysType() : Int32Type.instance;\n                return new ElementExpression(kind, elementType, keyOrIndexType, term);\n            }\n\n            UserType userType = (UserType) column.type;\n            int fieldPosition = userType.fieldPosition(udtField);\n            if (fieldPosition == -1)\n                throw invalidRequest(\"Unknown field %s for column %s\", udtField, column.name);\n\n            return new ElementExpression(kind,\n                                         userType.type(fieldPosition),\n                                         UTF8Type.instance,\n                                         new Constants.Value(udtField.bytes));\n        }\n\n        private Term prepareCollectionElement(ColumnMetadata receiver)\n        {\n            ColumnSpecification elementSpec;\n            switch ((((CollectionType<?>) receiver.type.unwrap()).kind))\n            {\n                case LIST:\n                    elementSpec = Lists.indexSpecOf(receiver);\n                    break;\n                case MAP:\n                    elementSpec = Maps.keySpecOf(receiver);\n                    break;","sourceCodeStart":214,"sourceCodeEnd":250,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/ElementExpression.java#L214-L250","documentation":"Thrown when a CQL UDT field access expression references a field name that does not exist in the User Defined Type of the target column. `ElementExpression.prepare()` looks up the field via `userType.fieldPosition(udtField)`; a return value of -1 means no field with that name is declared, so the expression cannot be prepared.","triggerScenarios":"CQL like `SELECT address.zip FROM t` or `WHERE addr['city'] = ...` where `address` is a UDT lacking a `zip`/`city` field; casing mismatches (UDT fields are case-sensitive as stored); querying after the UDT was altered and the field was dropped or renamed.","commonSituations":"UDT schema drift between environments; application code referencing an old UDT field name after `ALTER TYPE ... RENAME`/`ADD`; misspelled field names; client built statements against a stale schema version.","solutions":["Run `DESCRIBE TYPE <keyspace>.<type>` and confirm the exact field name and its case","Fix the field name in the CQL statement to match an existing UDT field","If the field should exist, add it with `ALTER TYPE <type> ADD <field> <type>`","Re-fetch schema metadata in the driver after UDT changes before re-preparing statements"],"exampleFix":"// before\nSELECT address.postcode FROM users;  -- UDT has no 'postcode'\n// after\nSELECT address.zip FROM users;       -- matches ALTER TYPE addr ADD zip text","handlingStrategy":"validation","validationCode":"// Check the UDT field exists before building the query\nUserType udt = (UserType) session.getMetadata().getKeyspace(ks).getUserDefinedType(typeName).getType();\nif (udt.fieldPosition(fieldName) < 0)\n    throw new IllegalArgumentException(\"UDT \" + typeName + \" has no field \" + fieldName);","typeGuard":"boolean hasUdtField(UserType udt, String field) {\n    return udt != null && udt.fieldPosition(field) >= 0;\n}","tryCatchPattern":null,"preventionTips":["Keep UDT definitions in version-controlled CQL migration scripts and mirror them in code","Match field-name casing exactly (UDT field names are stored as given)","Refresh driver schema metadata after ALTER TYPE operations","Validate generated queries against the live schema in CI"],"tags":["cql","udt","validation","query"],"backgroundTag":"schema-validation-failed","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"}