Fix cosineDistance crash with Nullable

This commit is contained in:
Raúl Marín 2024-02-19 17:30:00 +01:00
parent 491a4cd1e7
commit 793ae52bf8
4 changed files with 21 additions and 7 deletions

View File

@ -509,7 +509,7 @@ Result:
## cosineDistance
Calculates the cosine distance between two vectors (the values of the tuples are the coordinates). The less the returned value is, the more similar are the vectors.
Calculates the cosine distance between two vectors (the values of the tuples are the coordinates). The smaller the returned value is, the more similar are the vectors.
**Syntax**

View File

@ -1,9 +1,9 @@
#include <Columns/ColumnTuple.h>
#include <DataTypes/DataTypeArray.h>
#include <DataTypes/DataTypeInterval.h>
#include <DataTypes/DataTypeNullable.h>
#include <DataTypes/DataTypeTuple.h>
#include <DataTypes/DataTypesNumber.h>
#include <DataTypes/DataTypeNothing.h>
#include <Functions/FunctionFactory.h>
#include <Functions/FunctionHelpers.h>
#include <Functions/ITupleFunction.h>
@ -1364,11 +1364,11 @@ public:
ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override
{
if (getReturnTypeImpl(arguments)->isNullable())
{
return DataTypeNullable(std::make_shared<DataTypeNothing>())
.createColumnConstWithDefaultValue(input_rows_count);
}
/// TODO: cosineDistance does not support nullable arguments
/// https://github.com/ClickHouse/ClickHouse/pull/27933#issuecomment-916670286
auto return_type = getReturnTypeImpl(arguments);
if (return_type->isNullable())
return return_type->createColumnConstWithDefaultValue(input_rows_count);
FunctionDotProduct dot(context);
ColumnWithTypeAndName dot_result{dot.executeImpl(arguments, DataTypePtr(), input_rows_count),

View File

@ -0,0 +1,11 @@
\N
\N
\N
\N
\N
\N
\N
\N
\N
\N
\N

View File

@ -0,0 +1,3 @@
-- https://github.com/ClickHouse/ClickHouse/issues/59596
SELECT cosineDistance((1, 1), (toNullable(0.5), 0.1));
SELECT cosineDistance((1, 1), (toNullable(0.5), 0.1)) from numbers(10);