{"record":{"id":"dbc092b5b9f3f4e1","repo":"apache/cassandra","slug":"all-arguments-must-have-the-same-vector-dimensions","errorCode":null,"errorMessage":"All arguments must have the same vector dimensions","messagePattern":"All arguments must have the same vector dimensions","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/functions/VectorFcts.java","lineNumber":58,"sourceCode":"    }\n\n    private static FunctionFactory createSimilarityFunctionFactory(String name,\n                                                                   VectorSimilarityFunction vectorSimilarityFunction,\n                                                                   boolean supportsZeroVectors)\n    {\n        return new FunctionFactory(name,\n                                   FunctionParameter.sameAs(1, false, FunctionParameter.vector(CQL3Type.Native.FLOAT)),\n                                   FunctionParameter.sameAs(0, false, FunctionParameter.vector(CQL3Type.Native.FLOAT)))\n        {\n            @Override\n            @SuppressWarnings(\"unchecked\")\n            protected NativeFunction doGetOrCreateFunction(List<AbstractType<?>> argTypes, AbstractType<?> receiverType)\n            {\n                // check that all arguments have the same vector dimensions\n                VectorType<Float> firstArgType = (VectorType<Float>) argTypes.get(0);\n                int dimensions = firstArgType.dimension;\n                if (!argTypes.stream().allMatch(t -> ((VectorType<?>) t).dimension == dimensions))\n                    throw new InvalidRequestException(\"All arguments must have the same vector dimensions\");\n                return createSimilarityFunction(name.name, firstArgType, vectorSimilarityFunction, supportsZeroVectors);\n            }\n        };\n    }\n\n    private static NativeFunction createSimilarityFunction(String name,\n                                                           VectorType<Float> type,\n                                                           VectorSimilarityFunction f,\n                                                           boolean supportsZeroVectors)\n    {\n        return new NativeScalarFunction(name, FloatType.instance, type, type)\n        {\n            @Override\n            public Arguments newArguments(FunctionContext context)\n            {\n                return new FunctionArguments(context,\n                                             (v, b) -> type.composeAsFloat(b),\n                                             (v, b) -> type.composeAsFloat(b));","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/functions/VectorFcts.java#L40-L76","documentation":"Cassandra's vector similarity functions (similarity_cosine, similarity_dot_product, similarity_euclidean) require all arguments to be vectors of identical dimensions. In doGetOrCreateFunction, the first argument's dimension is captured and every argument type is checked against it; any mismatch throws this InvalidRequestException at function-resolution time.","triggerScenarios":"Calling a vector similarity function in CQL with vector<float, N> arguments whose dimension values differ, e.g. similarity_cosine(v3, v5) where v3 is vector<float,3> and v5 is vector<float,5>.","commonSituations":"Comparing vectors stored in different tables or columns that were created with different dimension counts; schema drift after changing ANN index dimensions; passing a literal vector with a different number of floats than the column.","solutions":["Alter or recreate the involved columns/indexes so both vectors use the same dimension count","Cast or rebuild the data (e.g. truncate/pad vectors) so all arguments share one dimension","Verify the column definitions with DESCRIBE TABLE / system_schema to confirm dimensions before querying"],"exampleFix":"// before\nSELECT similarity_cosine(embedding, vector[1.0, 2.0]) FROM items; -- embedding is vector<float,5>\n// after\nSELECT similarity_cosine(embedding, vector[1.0, 2.0, 0.0, 0.0, 0.0]) FROM items;","handlingStrategy":"validation","validationCode":"boolean dimsMatch = argTypes.stream().allMatch(t -> ((VectorType<?>) t).dimension == ((VectorType<?>) argTypes.get(0)).dimension);\nif (!dimsMatch) throw new IllegalArgumentException(\"similarity function args must have equal vector dimensions\");","typeGuard":"boolean isCompatibleVectorPair(AbstractType<?> a, AbstractType<?> b) {\n    return a instanceof VectorType && b instanceof VectorType\n        && ((VectorType<?>) a).dimension == ((VectorType<?>) b).dimension;\n}","tryCatchPattern":"try {\n    session.execute(query);\n} catch (InvalidRequestException e) {\n    if (e.getMessage().contains(\"same vector dimensions\")) {\n        // correct schema or query and retry\n    }\n}","preventionTips":["Use consistent vector dimension constants when creating tables and ANN indexes","Check system_schema.columns type metadata before comparing vector columns","Pad/truncate literals to the column's dimension before embedding them in queries"],"tags":["cassandra","vector-search","invalid-request"],"backgroundTag":"shape-mismatch","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"}