#include #include #include namespace DB { /** Calculates the length of a string in bytes. */ struct LengthImpl { static constexpr auto is_fixed_to_constant = true; static void vector(const ColumnString::Chars & /*data*/, const ColumnString::Offsets & offsets, PaddedPODArray & res) { size_t size = offsets.size(); for (size_t i = 0; i < size; ++i) res[i] = offsets[i] - 1 - offsets[i - 1]; } static void vector_fixed_to_constant(const ColumnString::Chars & /*data*/, size_t n, UInt64 & res) { res = n; } static void vector_fixed_to_vector(const ColumnString::Chars & /*data*/, size_t /*n*/, PaddedPODArray & /*res*/) { } static void array(const ColumnString::Offsets & offsets, PaddedPODArray & res) { size_t size = offsets.size(); for (size_t i = 0; i < size; ++i) res[i] = offsets[i] - offsets[i - 1]; } }; struct NameLength { static constexpr auto name = "length"; }; using FunctionLength = FunctionStringOrArrayToT; void registerFunctionLength(FunctionFactory & factory) { factory.registerFunction(FunctionFactory::CaseInsensitive); } }