summaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Functions/randomString.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/Functions/randomString.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/Functions/randomString.cpp')
-rw-r--r--contrib/clickhouse/src/Functions/randomString.cpp132
1 files changed, 0 insertions, 132 deletions
diff --git a/contrib/clickhouse/src/Functions/randomString.cpp b/contrib/clickhouse/src/Functions/randomString.cpp
deleted file mode 100644
index 4afd0799d29..00000000000
--- a/contrib/clickhouse/src/Functions/randomString.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <Columns/ColumnString.h>
-#include <DataTypes/DataTypeString.h>
-#include <Functions/FunctionFactory.h>
-#include <Functions/FunctionHelpers.h>
-#include <Functions/IFunction.h>
-#include <Functions/FunctionsRandom.h>
-#include <Functions/PerformanceAdaptors.h>
-#include <pcg_random.hpp>
-#include <Common/randomSeed.h>
-#include <base/unaligned.h>
-
-
-namespace DB
-{
-namespace ErrorCodes
-{
- extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH;
- extern const int ILLEGAL_TYPE_OF_ARGUMENT;
- extern const int TOO_LARGE_STRING_SIZE;
-}
-
-namespace
-{
-
-/* Generate random string of specified length with fully random bytes (including zero). */
-template <typename RandImpl>
-class FunctionRandomStringImpl : public IFunction
-{
-public:
- static constexpr auto name = "randomString";
-
- String getName() const override { return name; }
-
- bool isVariadic() const override { return true; }
-
- bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*arguments*/) const override { return false; }
-
- size_t getNumberOfArguments() const override { return 0; }
-
- DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override
- {
- if (arguments.empty())
- throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH,
- "Function {} requires at least one argument: the size of resulting string", getName());
-
- if (arguments.size() > 2)
- throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH,
- "Function {} requires at most two arguments: the size of resulting string and optional disambiguation tag", getName());
-
- const IDataType & length_type = *arguments[0];
- if (!isNumber(length_type))
- throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "First argument of function {} must have numeric type", getName());
-
- return std::make_shared<DataTypeString>();
- }
-
- bool isDeterministic() const override { return false; }
- bool isDeterministicInScopeOfQuery() const override { return false; }
-
- ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override
- {
- auto col_to = ColumnString::create();
- ColumnString::Chars & data_to = col_to->getChars();
- ColumnString::Offsets & offsets_to = col_to->getOffsets();
-
- if (input_rows_count == 0)
- return col_to;
-
- /// Fill offsets.
- offsets_to.resize(input_rows_count);
- const IColumn & length_column = *arguments[0].column;
-
- IColumn::Offset offset = 0;
- for (size_t row_num = 0; row_num < input_rows_count; ++row_num)
- {
- size_t length = length_column.getUInt(row_num);
- if (length > (1 << 30))
- throw Exception(ErrorCodes::TOO_LARGE_STRING_SIZE, "Too large string size in function {}", getName());
-
- offset += length + 1;
- offsets_to[row_num] = offset;
- }
-
- /// Fill random bytes.
- data_to.resize(offsets_to.back());
- RandImpl::execute(reinterpret_cast<char *>(data_to.data()), data_to.size());
-
- /// Put zero bytes in between.
- auto * pos = data_to.data();
- for (size_t row_num = 0; row_num < input_rows_count; ++row_num)
- pos[offsets_to[row_num] - 1] = 0;
-
- return col_to;
- }
-};
-
-class FunctionRandomString : public FunctionRandomStringImpl<TargetSpecific::Default::RandImpl>
-{
-public:
- explicit FunctionRandomString(ContextPtr context) : selector(context)
- {
- selector.registerImplementation<TargetArch::Default,
- FunctionRandomStringImpl<TargetSpecific::Default::RandImpl>>();
-
- #if USE_MULTITARGET_CODE
- selector.registerImplementation<TargetArch::AVX2,
- FunctionRandomStringImpl<TargetSpecific::AVX2::RandImpl>>();
- #endif
- }
-
- ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override
- {
- return selector.selectAndExecute(arguments, result_type, input_rows_count);
- }
-
- static FunctionPtr create(ContextPtr context)
- {
- return std::make_shared<FunctionRandomString>(context);
- }
-
-private:
- ImplementationSelector<IFunction> selector;
-};
-
-}
-
-REGISTER_FUNCTION(RandomString)
-{
- factory.registerFunction<FunctionRandomString>();
-}
-
-}