summaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Interpreters/createBlockSelector.cpp
diff options
context:
space:
mode:
authorAlexSm <[email protected]>2024-01-04 15:09:05 +0100
committerGitHub <[email protected]>2024-01-04 15:09:05 +0100
commitdab291146f6cd7d35684e3a1150e5bb1c412982c (patch)
tree36ef35f6cacb6432845a4a33f940c95871036b32 /contrib/clickhouse/src/Interpreters/createBlockSelector.cpp
parent63660ad5e7512029fd0218e7a636580695a24e1f (diff)
Library import 5, delete go dependencies (#832)
* Library import 5, delete go dependencies * Fix yt client
Diffstat (limited to 'contrib/clickhouse/src/Interpreters/createBlockSelector.cpp')
-rw-r--r--contrib/clickhouse/src/Interpreters/createBlockSelector.cpp73
1 files changed, 0 insertions, 73 deletions
diff --git a/contrib/clickhouse/src/Interpreters/createBlockSelector.cpp b/contrib/clickhouse/src/Interpreters/createBlockSelector.cpp
deleted file mode 100644
index a8eb39e6c9d..00000000000
--- a/contrib/clickhouse/src/Interpreters/createBlockSelector.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <Columns/ColumnConst.h>
-#include <Columns/ColumnVector.h>
-#include <Common/typeid_cast.h>
-#include <Common/assert_cast.h>
-#include <Common/Exception.h>
-
-#include <type_traits>
-
-#include <libdivide-config.h>
-#include <libdivide.h>
-
-
-namespace DB
-{
-
-namespace ErrorCodes
-{
- extern const int LOGICAL_ERROR;
-}
-
-template <typename T>
-IColumn::Selector createBlockSelector(
- const IColumn & column,
- const std::vector<UInt64> & slots)
-{
- const auto total_weight = slots.size();
- if (total_weight == 0)
- throw Exception(ErrorCodes::LOGICAL_ERROR, "weight is zero");
-
- size_t num_rows = column.size();
- IColumn::Selector selector(num_rows);
-
- /** Modulo of division of negative numbers to positive number in C++11 is negative (so called truncated division).
- * This is not suitable for our task. So we will process signed numbers as unsigned.
- * It is not near like remainder of division, but is suitable for our task.
- */
- using UnsignedT = make_unsigned_t<T>;
-
- /// const columns contain only one value, therefore we do not need to read it at every iteration
- if (isColumnConst(column))
- {
- const auto data = assert_cast<const ColumnConst &>(column).getValue<T>();
- const auto shard_num = slots[static_cast<UnsignedT>(data) % total_weight];
- selector.assign(num_rows, shard_num);
- }
- else
- {
- /// libdivide support only UInt32 and UInt64.
- using TUInt32Or64 = std::conditional_t<sizeof(UnsignedT) <= 4, UInt32, UInt64>;
-
- libdivide::divider<TUInt32Or64> divider(static_cast<TUInt32Or64>(total_weight));
-
- const auto & data = typeid_cast<const ColumnVector<T> &>(column).getData();
-
- for (size_t i = 0; i < num_rows; ++i)
- selector[i] = slots[static_cast<TUInt32Or64>(data[i]) - (static_cast<TUInt32Or64>(data[i]) / divider) * total_weight];
- }
-
- return selector;
-}
-
-
-/// Explicit instantiations to avoid code bloat in headers.
-template IColumn::Selector createBlockSelector<UInt8>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<UInt16>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<UInt32>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<UInt64>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<Int8>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<Int16>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<Int32>(const IColumn & column, const std::vector<UInt64> & slots);
-template IColumn::Selector createBlockSelector<Int64>(const IColumn & column, const std::vector<UInt64> & slots);
-
-}