{"record":{"id":"4b6b69fa540c341b","repo":"apache/cassandra","slug":"invalid-set-literal-for-s-bind-variables-are-not","errorCode":null,"errorMessage":"Invalid set literal for %s: bind variables are not supported inside collection literals","messagePattern":"Invalid set literal for (.+?): bind variables are not supported inside collection literals","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/terms/Sets.java","lineNumber":167,"sourceCode":"\n        public Term prepare(String keyspace, ColumnSpecification receiver) throws InvalidRequestException\n        {\n            validateAssignableTo(keyspace, receiver);\n\n            // We've parsed empty maps as a set literal to break the ambiguity so\n            // handle that case now\n            if (receiver.type instanceof MapType && elements.isEmpty())\n                return new MultiElements.Value(((MapType<?, ?>) receiver.type), Collections.emptyList());\n\n            ColumnSpecification valueSpec = Sets.valueSpecOf(receiver);\n            List<Term> values = new ArrayList<>(elements.size());\n            boolean allTerminal = true;\n            for (Term.Raw rt : elements)\n            {\n                Term t = rt.prepare(keyspace, valueSpec);\n\n                if (t.containsBindMarker())\n                    throw new InvalidRequestException(String.format(\"Invalid set literal for %s: bind variables are not supported inside collection literals\", receiver.name));\n\n                if (t instanceof Term.NonTerminal)\n                    allTerminal = false;\n\n                values.add(t);\n            }\n            MultiElements.DelayedValue value = new MultiElements.DelayedValue((MultiElementType<?>) receiver.type.unwrap(), values);\n            return allTerminal ? value.bind(FunctionContext.NONE) : value;\n        }\n\n        private void validateAssignableTo(String keyspace, ColumnSpecification receiver) throws InvalidRequestException\n        {\n            AbstractType<?> type = receiver.type.unwrap();\n\n            if (!(type instanceof SetType))\n            {\n                // We've parsed empty maps as a set literal to break the ambiguity so\n                // handle that case now","sourceCodeStart":149,"sourceCodeEnd":185,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/terms/Sets.java#L149-L185","documentation":"Fired during set-literal preparation when any element of a set literal is a bind marker (Terms.NON_TERMINAL containing a marker). Collection literals may only contain constants/literals, not '?' bind variables, so preparation fails immediately before element type checking.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/terms/Sets.java:167 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Replace the bind marker (?) or named variable inside the set literal with a literal element value","Bind the entire collection as one variable instead of individual elements inside the literal"],"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"}