{"record":{"id":"63aa1f3f8abba742","repo":"apache/cassandra","slug":"conditions-on-counters-are-not-supported","errorCode":null,"errorMessage":"Conditions on counters are not supported","messagePattern":"Conditions on counters are not supported","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java","lineNumber":554,"sourceCode":"        public static Raw udtFieldCondition(ColumnIdentifier column, FieldIdentifier udtField, Operator op, Terms.Raw values)\n        {\n            return new Raw(ColumnsExpression.Raw.udtField(column, udtField), op, values);\n        }\n\n        public ColumnsExpression.Raw columnExpression()\n        {\n            return rawExpressions;\n        }\n\n        public ColumnCondition prepare(TableMetadata table)\n        {\n            ColumnsExpression expression = rawExpressions.prepare(table);\n            ColumnSpecification receiver = expression.columnSpecification();\n\n            checkFalse(expression.columnsKind().isPrimaryKeyKind(), \"PRIMARY KEY column '%s' cannot have IF conditions\", receiver.name);\n\n            if (receiver.type instanceof CounterColumnType)\n                throw invalidRequest(\"Conditions on counters are not supported\");\n\n            validateOperationOnDurations(receiver.type);\n            return new ColumnCondition(expression, operator, prepareTerms(table.keyspace, receiver));\n        }\n\n        private Terms prepareTerms(String keyspace, ColumnSpecification receiver)\n        {\n            checkFalse(operator == Operator.CONTAINS_KEY && !(receiver.type instanceof MapType),\n                       \"Cannot use CONTAINS KEY on non-map column %s\", receiver.name);\n            checkFalse(operator == Operator.CONTAINS && !(receiver.type.isCollection()),\n                       \"Cannot use CONTAINS on non-collection column %s\", receiver.name);\n\n            if (operator == Operator.CONTAINS || operator == Operator.CONTAINS_KEY)\n                receiver = ((CollectionType<?>) receiver.type).makeCollectionReceiver(receiver, operator == Operator.CONTAINS_KEY);\n\n            return values.prepare(keyspace, receiver);\n        }\n","sourceCodeStart":536,"sourceCodeEnd":572,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java#L536-L572","documentation":"Guard raised when preparing a LWT condition whose target column is a counter. Lightweight transactions are incompatible with counters, so any conditional UPDATE/DELETE (or INSERT IF NOT EXISTS) on a counter column is rejected at statement preparation time.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java:554 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the IF condition from counter updates.","If compare-and-set behavior is required, model the value as a regular column with CAS semantics instead of a counter."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}