Skip to content

Commit

Permalink
Support cast varchar to HLL (StarRocks#1920)
Browse files Browse the repository at this point in the history
  • Loading branch information
kangkaisen authored Dec 7, 2021
1 parent 381b6cc commit 21a42ea
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions be/src/exprs/vectorized/cast_expr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "exprs/vectorized/unary_function.h"
#include "gutil/strings/substitute.h"
#include "runtime/runtime_state.h"
#include "storage/hll.h"
#include "util/date_func.h"

namespace starrocks {
Expand Down Expand Up @@ -134,6 +135,28 @@ ColumnPtr cast_fn<TYPE_VARCHAR, TYPE_BOOLEAN>(ColumnPtr& column) {
return builder.build(column->is_constant());
}

template <>
ColumnPtr cast_fn<TYPE_VARCHAR, TYPE_HLL>(ColumnPtr& column) {
ColumnBuilder<TYPE_HLL> builder;
ColumnViewer<TYPE_VARCHAR> viewer(column);
for (int row = 0; row < viewer.size(); ++row) {
if (viewer.is_null(row)) {
builder.append_null();
continue;
}

auto value = viewer.value(row);
if (!HyperLogLog::is_valid(value)) {
builder.append_null();
} else {
HyperLogLog hll;
hll.deserialize(value);
builder.append(&hll);
}
}

return builder.build(column->is_constant());
}
// all int(tinyint, smallint, int, bigint, largeint) cast implements
DEFINE_UNARY_FN_WITH_IMPL(ImplicitToNumber, value) {
return value;
Expand Down Expand Up @@ -1006,6 +1029,10 @@ Expr* VectorizedCastExprFactory::from_thrift(const TExprNode& node) {
from_type = to_type;
}

if (from_type == TYPE_VARCHAR && to_type == TYPE_HLL) {
return new VectorizedCastExpr<TYPE_VARCHAR, TYPE_HLL>(node);
}

if (to_type == TYPE_VARCHAR) {
switch (from_type) {
CASE_TO_STRING_FROM(TYPE_BOOLEAN);
Expand Down

0 comments on commit 21a42ea

Please sign in to comment.