{"record":{"id":"378647db6b022fb2","repo":"apache/cassandra","slug":"invalid-tuple-literal-too-many-elements-type-s","errorCode":null,"errorMessage":"Invalid tuple literal: too many elements. Type %s expects %d but got %d","messagePattern":"Invalid tuple literal: too many elements\\. Type (.+?) expects (.+?) but got (.+?)","errorType":"validation","errorClass":"MarshalException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/marshal/TupleType.java","lineNumber":465,"sourceCode":"            }\n\n            V field = accessor.slice(input, offset, size);\n            offset += size;\n            // We use ':' as delimiter, and @ to represent null, so escape them in the generated string\n            String fld = COLON_PAT.matcher(type.getString(field, accessor)).replaceAll(ESCAPED_COLON);\n            fld = AT_PAT.matcher(fld).replaceAll(ESCAPED_AT);\n            sb.append(fld);\n        }\n        return sb.toString();\n    }\n\n    public ByteBuffer fromString(String source)\n    {\n        // Split the input on non-escaped ':' characters\n        List<String> fieldStrings = AbstractCompositeType.split(source);\n\n        if (fieldStrings.size() > size())\n            throw new MarshalException(String.format(\"Invalid tuple literal: too many elements. Type %s expects %d but got %d\",\n                                                     asCQL3Type(), size(), fieldStrings.size()));\n\n        List<ByteBuffer> fields = new ArrayList<>(fieldStrings.size());\n        for (int i = 0; i < fieldStrings.size(); i++)\n        {\n            String fieldString = fieldStrings.get(i);\n            // We use @ to represent nulls\n            if (fieldString.equals(\"@\"))\n            {\n                fields.add(null);\n            }\n            else\n            {\n                AbstractType<?> type = type(i);\n                fieldString = ESCAPED_COLON_PAT.matcher(fieldString).replaceAll(COLON);\n                fieldString = ESCAPED_AT_PAT.matcher(fieldString).replaceAll(AT);\n                fields.add(type.fromString(fieldString));\n            }","sourceCodeStart":447,"sourceCodeEnd":483,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/marshal/TupleType.java#L447-L483","documentation":"TupleType.fromString parses a tuple literal string (split on non-escaped ':'). If the string contains more colon-separated elements than the tuple type declares, it throws this MarshalException. The CQL literal form must not exceed the tuple's arity.","triggerScenarios":"Passing a string literal like \"1:2:3\" to a tuple<int,int> type's fromString; using the type in a context where a raw string is parsed into a Term with more fields than declared.","commonSituations":"Typing tuple literals in cqlsh or application-generated CQL with the wrong element count; forgetting that fields are ':' separated and embedding unescaped colons in data (e.g. timestamps or URLs).","solutions":["Reduce the literal to at most size() elements","Escape literal ':' characters inside field data with a backslash ('\\\\:')","Use the JSON/parameterized insert form instead of string literals for data containing colons","Verify the target tuple type's arity before constructing the literal"],"exampleFix":"// before: too many elements for tuple<int,int>\nTupleType t = TupleType.getInstance(Int32Type.instance, Int32Type.instance);\nt.fromString(\"1:2:3\"); // throws\n// after\nt.fromString(\"1:2\");","handlingStrategy":"validation","validationCode":"int count = AbstractCompositeType.split(source).size();\nif (count > tupleType.size()) throw new IllegalArgumentException(\"literal has \" + count + \" elements, max \" + tupleType.size());","typeGuard":null,"tryCatchPattern":"try {\n    tupleType.fromString(literal);\n} catch (MarshalException e) {\n    throw new IllegalArgumentException(\"bad tuple literal: \" + e.getMessage());\n}","preventionTips":["Escape ':' in field data as '\\\\:' when building literals","Prefer parameterized binds over string literals for data containing colons","Confirm arity before composing literal strings"],"tags":["tuple","literal-parsing","cql"],"backgroundTag":"invalid-argument-format","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"}