提交 70385e12 编写于 作者: A Alexey Milovidov

Reverted experimental modification [#CONV-2944].

上级 c3c69f44
...@@ -10,7 +10,7 @@ namespace DB ...@@ -10,7 +10,7 @@ namespace DB
/** Столбец, хранящий состояния агрегатных функций. /** Столбец, хранящий состояния агрегатных функций.
*/ */
class ColumnAggregateFunction : public ColumnVector<AggregateFunctionPtr, std::vector<AggregateFunctionPtr> > class ColumnAggregateFunction : public ColumnVector<AggregateFunctionPtr>
{ {
public: public:
std::string getName() const { return "ColumnAggregateFunction"; } std::string getName() const { return "ColumnAggregateFunction"; }
...@@ -62,12 +62,13 @@ public: ...@@ -62,12 +62,13 @@ public:
return 0; return 0;
} }
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
size_t s = data.size(); size_t s = data.size();
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
return res;
} }
}; };
......
...@@ -241,16 +241,16 @@ public: ...@@ -241,16 +241,16 @@ public:
} }
}; };
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
Permutation nested_perm; Permutation nested_perm = data->getPermutation();
data->getPermutation(nested_perm);
size_t s = size(); size_t s = size();
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
std::sort(res.begin(), res.end(), less(*this, nested_perm)); std::sort(res.begin(), res.end(), less(*this, nested_perm));
return res;
} }
size_t byteSize() const size_t byteSize() const
......
...@@ -88,11 +88,12 @@ public: ...@@ -88,11 +88,12 @@ public:
: 1); : 1);
} }
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
return res;
} }
StringRef getDataAt(size_t n) const; StringRef getDataAt(size_t n) const;
......
...@@ -173,16 +173,16 @@ public: ...@@ -173,16 +173,16 @@ public:
} }
}; };
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
Permutation nested_perm; Permutation nested_perm = data->getPermutation();
data->getPermutation(nested_perm);
size_t s = data->size() / n; size_t s = data->size() / n;
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
std::sort(res.begin(), res.end(), less(*this, nested_perm)); std::sort(res.begin(), res.end(), less(*this, nested_perm));
return res;
} }
size_t byteSize() const size_t byteSize() const
......
...@@ -93,14 +93,15 @@ public: ...@@ -93,14 +93,15 @@ public:
} }
}; };
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
size_t s = size(); size_t s = size();
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
std::sort(res.begin(), res.end(), less(*this)); std::sort(res.begin(), res.end(), less(*this));
return res;
} }
void replicate(const Offsets_t & offsets) void replicate(const Offsets_t & offsets)
......
...@@ -44,11 +44,12 @@ public: ...@@ -44,11 +44,12 @@ public:
throw Exception("Size of permutation doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH); throw Exception("Size of permutation doesn't match size of column.", ErrorCodes::SIZES_OF_COLUMNS_DOESNT_MATCH);
} }
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
return res;
} }
void replicate(const Offsets_t & offsets) void replicate(const Offsets_t & offsets)
......
...@@ -166,14 +166,15 @@ public: ...@@ -166,14 +166,15 @@ public:
} }
}; };
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
size_t s = getOffsets().size(); size_t s = getOffsets().size();
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
std::sort(res.begin(), res.end(), less(*this)); std::sort(res.begin(), res.end(), less(*this));
return res;
} }
void replicate(const Offsets_t & replicate_offsets) void replicate(const Offsets_t & replicate_offsets)
......
...@@ -137,15 +137,16 @@ public: ...@@ -137,15 +137,16 @@ public:
} }
}; };
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
size_t rows = size(); size_t rows = size();
res.resize(rows); Permutation perm(rows);
for (size_t i = 0; i < rows; ++i) for (size_t i = 0; i < rows; ++i)
res[i] = i; perm[i] = i;
Less less(columns); Less less(columns);
std::sort(res.begin(), res.end(), less); std::sort(perm.begin(), perm.end(), less);
return perm;
} }
void clear() void clear()
......
...@@ -57,15 +57,14 @@ public: ...@@ -57,15 +57,14 @@ public:
}; };
/** Шаблон столбцов, которые используют для хранения непрерывный кусок памяти. /** Шаблон столбцов, которые используют для хранения std::vector.
*/ */
template <typename T, typename Container = PODArray<T> > template <typename T>
class ColumnVector : public IColumn class ColumnVector : public IColumn
{ {
public: public:
typedef T value_type; typedef T value_type;
typedef Container Container_t; typedef std::vector<value_type> Container_t;
typedef ColumnVector<T, Container> Self;
ColumnVector() {} ColumnVector() {}
ColumnVector(size_t n) : data(n) {} ColumnVector(size_t n) : data(n) {}
...@@ -78,7 +77,7 @@ public: ...@@ -78,7 +77,7 @@ public:
ColumnPtr cloneEmpty() const ColumnPtr cloneEmpty() const
{ {
return new Self; return new ColumnVector<T>;
} }
size_t size() const size_t size() const
...@@ -106,7 +105,7 @@ public: ...@@ -106,7 +105,7 @@ public:
if (start + length > data.size()) if (start + length > data.size())
throw Exception("Parameters start = " throw Exception("Parameters start = "
+ Poco::NumberFormatter::format(start) + ", length = " + Poco::NumberFormatter::format(start) + ", length = "
+ Poco::NumberFormatter::format(length) + " are out of bound in ColumnVector<>::cut() method" + Poco::NumberFormatter::format(length) + " are out of bound in IColumnVector<T>::cut() method"
" (data.size() = " + Poco::NumberFormatter::format(data.size()) + ").", " (data.size() = " + Poco::NumberFormatter::format(data.size()) + ").",
ErrorCodes::PARAMETER_OUT_OF_BOUND); ErrorCodes::PARAMETER_OUT_OF_BOUND);
...@@ -127,7 +126,7 @@ public: ...@@ -127,7 +126,7 @@ public:
void insertFrom(const IColumn & src, size_t n) void insertFrom(const IColumn & src, size_t n)
{ {
data.push_back(static_cast<const Self &>(src).getData()[n]); data.push_back(static_cast<const ColumnVector<T> &>(src).getData()[n]);
} }
void insertDefault() void insertDefault()
...@@ -175,7 +174,7 @@ public: ...@@ -175,7 +174,7 @@ public:
int compareAt(size_t n, size_t m, const IColumn & rhs_) const int compareAt(size_t n, size_t m, const IColumn & rhs_) const
{ {
const Self & rhs = static_cast<const Self &>(rhs_); const ColumnVector<T> & rhs = static_cast<const ColumnVector<T> &>(rhs_);
return data[n] < rhs.data[m] return data[n] < rhs.data[m]
? -1 ? -1
: (data[n] == rhs.data[m] : (data[n] == rhs.data[m]
...@@ -185,19 +184,21 @@ public: ...@@ -185,19 +184,21 @@ public:
struct less struct less
{ {
const Self & parent; const ColumnVector<T> & parent;
less(const Self & parent_) : parent(parent_) {} less(const ColumnVector<T> & parent_) : parent(parent_) {}
bool operator()(size_t lhs, size_t rhs) const { return parent.data[lhs] < parent.data[rhs]; } bool operator()(size_t lhs, size_t rhs) const { return parent.data[lhs] < parent.data[rhs]; }
}; };
void getPermutation(Permutation & res) const Permutation getPermutation() const
{ {
size_t s = data.size(); size_t s = data.size();
res.resize(s); Permutation res(s);
for (size_t i = 0; i < s; ++i) for (size_t i = 0; i < s; ++i)
res[i] = i; res[i] = i;
std::sort(res.begin(), res.end(), less(*this)); std::sort(res.begin(), res.end(), less(*this));
return res;
} }
void replicate(const Offsets_t & offsets) void replicate(const Offsets_t & offsets)
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
#include <DB/Core/ErrorCodes.h> #include <DB/Core/ErrorCodes.h>
#include <DB/Core/StringRef.h> #include <DB/Core/StringRef.h>
#include <DB/Common/PODArray.h>
namespace DB namespace DB
{ {
...@@ -96,13 +94,13 @@ public: ...@@ -96,13 +94,13 @@ public:
/** Оставить только значения, соответствующие фильтру. /** Оставить только значения, соответствующие фильтру.
* Используется для операции WHERE / HAVING. * Используется для операции WHERE / HAVING.
*/ */
typedef PODArray<UInt8> Filter; typedef std::vector<UInt8> Filter;
virtual void filter(const Filter & filt) = 0; virtual void filter(const Filter & filt) = 0;
/** Переставить значения местами, используя указанную перестановку. /** Переставить значения местами, используя указанную перестановку.
* Используется при сортировке. * Используется при сортировке.
*/ */
typedef PODArray<size_t> Permutation; typedef std::vector<size_t> Permutation;
virtual void permute(const Permutation & perm) = 0; virtual void permute(const Permutation & perm) = 0;
/** Сравнить (*this)[n] и rhs[m]. /** Сравнить (*this)[n] и rhs[m].
...@@ -114,13 +112,13 @@ public: ...@@ -114,13 +112,13 @@ public:
/** Получить перестановку чисел, такую, что их порядок соответствует порядку значений в столбце. /** Получить перестановку чисел, такую, что их порядок соответствует порядку значений в столбце.
* Используется при сортировке. * Используется при сортировке.
*/ */
virtual void getPermutation(Permutation & res) const = 0; virtual Permutation getPermutation() const = 0;
/** Размножить все значения столько раз, сколько прописано в offsets. /** Размножить все значения столько раз, сколько прописано в offsets.
* (i-е значение размножается в offsets[i] - offsets[i - 1] значений.) * (i-е значение размножается в offsets[i] - offsets[i - 1] значений.)
*/ */
typedef UInt64 Offset_t; typedef UInt64 Offset_t;
typedef PODArray<Offset_t> Offsets_t; typedef std::vector<Offset_t> Offsets_t;
virtual void replicate(const Offsets_t & offsets) = 0; virtual void replicate(const Offsets_t & offsets) = 0;
/** Очистить */ /** Очистить */
......
#pragma once
#include <string.h>
#include <cstddef>
#include <sys/mman.h>
#include <algorithm>
#include <boost/noncopyable.hpp>
#include <Yandex/optimization.h>
#include <DB/Core/Exception.h>
namespace DB
{
/** Динамический массив для POD-типов.
* Предназначен для небольшого количества больших массивов (а не большого количества маленьких).
* А точнее - для использования в ColumnVector.
* Отличается от std::vector тем, что использует mremap для ресайза, а также не инициализирует элементы.
* (впрочем, mmap даёт память, инициализированную нулями, так что можно считать, что элементы инициализируются)
* Сделано noncopyable, чтобы не было случайных копий. Скопировать данные можно с помощью метода assign.
* Поддерживается только часть интерфейса std::vector.
*
* Если вставлять элементы push_back-ом, не делая reserve, то PODArray примерно в 2.5 раза быстрее std::vector.
*/
template <typename T>
class PODArray : private boost::noncopyable
{
private:
static const size_t initial_size = 4096;
char * c_start;
char * c_end;
char * c_end_of_storage;
T * t_start() { return reinterpret_cast<T *>(c_start); }
T * t_end() { return reinterpret_cast<T *>(c_end); }
T * t_end_of_storage() { return reinterpret_cast<T *>(c_end_of_storage); }
const T * t_start() const { return reinterpret_cast<const T *>(c_start); }
const T * t_end() const { return reinterpret_cast<const T *>(c_end); }
const T * t_end_of_storage() const { return reinterpret_cast<const T *>(c_end_of_storage); }
size_t storage_size() const { return c_end_of_storage - c_start; }
static size_t byte_size(size_t n) { return n * sizeof(T); }
static size_t round_up_to_power_of_two(size_t n) { return n == 0 ? 0 : (0x8000000000000000ULL >> (__builtin_clzl(n - 1) - 1)); }
static size_t to_size(size_t n) { return byte_size(std::max(initial_size, round_up_to_power_of_two(n))); }
void alloc(size_t n)
{
size_t bytes_to_alloc = to_size(n);
c_start = c_end = reinterpret_cast<char *>(mmap(NULL, bytes_to_alloc, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));
c_end_of_storage = c_start + bytes_to_alloc;
if (MAP_FAILED == c_start)
throwFromErrno("PODArray: Cannot mmap.");
}
void dealloc()
{
if (0 != munmap(c_start, storage_size()))
throwFromErrno("PODArray: Cannot munmap.");
}
void realloc(size_t n)
{
ptrdiff_t end_diff = c_end - c_start;
size_t bytes_to_alloc = to_size(n);
c_start = reinterpret_cast<char *>(mremap(c_start, storage_size(), bytes_to_alloc, MREMAP_MAYMOVE));
c_end = c_start + end_diff;
c_end_of_storage = c_start + bytes_to_alloc;
if (MAP_FAILED == c_start)
throwFromErrno("PODArray: Cannot mremap.");
}
public:
typedef T value_type;
typedef T * iterator;
typedef const T * const_iterator;
PODArray() { alloc(initial_size); }
PODArray(size_t n) { alloc(n); c_end += byte_size(n); }
PODArray(size_t n, const T & x) { alloc(n); assign(n, x); }
PODArray(const_iterator from_begin, const_iterator from_end) { alloc(from_end - from_begin); insert(from_end - from_begin); }
~PODArray() { dealloc(); }
size_t size() const { return t_end() - t_start(); }
bool empty() const { return t_end() == t_start(); }
size_t capacity() const { return t_end_of_storage() - t_start(); }
T & operator[] (size_t n) { return t_start()[n]; }
const T & operator[] (size_t n) const { return t_start()[n]; }
T & front() { return t_start()[0]; }
T & back() { return t_end()[-1]; }
const T & front() const { return t_start()[0]; }
const T & back() const { return t_end()[-1]; }
iterator begin() { return t_start(); }
iterator end() { return t_end(); }
const_iterator begin() const { return t_start(); }
const_iterator end() const { return t_end(); }
void reserve(size_t n)
{
if (n > capacity())
realloc(n);
}
void reserve()
{
realloc(size() * 2);
}
void resize(size_t n)
{
reserve(n);
c_end = c_start + byte_size(n);
}
void clear()
{
c_end = c_start;
}
void push_back(const T & x)
{
if (unlikely(c_end == c_end_of_storage))
reserve();
*t_end() = x;
c_end += byte_size(1);
}
/// Не вставляйте в массив кусок самого себя. Потому что при ресайзе, итераторы на самого себя могут инвалидироваться.
void insert(const_iterator from_begin, const_iterator from_end)
{
size_t required_capacity = size() + from_end - from_begin;
if (required_capacity > capacity())
reserve(round_up_to_power_of_two(required_capacity));
size_t bytes_to_copy = byte_size(from_end - from_begin);
memcpy(c_end, reinterpret_cast<const void *>(from_begin), bytes_to_copy);
c_end += bytes_to_copy;
}
void swap(PODArray<T> & rhs)
{
std::swap(c_start, rhs.c_start);
std::swap(c_end, rhs.c_end);
std::swap(c_end_of_storage, rhs.c_end_of_storage);
}
void assign(size_t n, const T & x)
{
resize(n);
std::fill(begin(), end(), x);
}
void assign(const_iterator from_begin, const_iterator from_end)
{
size_t required_capacity = from_end - from_begin;
if (required_capacity > capacity())
reserve(round_up_to_power_of_two(required_capacity));
size_t bytes_to_copy = byte_size(required_capacity);
memcpy(c_start, reinterpret_cast<const void *>(from_begin), bytes_to_copy);
c_end = c_start + bytes_to_copy;
}
void assign(const PODArray<T> & from)
{
assign(from.begin(), from.end());
}
};
}
...@@ -20,21 +20,21 @@ struct BinaryOperationImpl ...@@ -20,21 +20,21 @@ struct BinaryOperationImpl
{ {
typedef typename Op::ResultType ResultType; typedef typename Op::ResultType ResultType;
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<ResultType> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<ResultType> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = Op::apply(a[i], b[i]); c[i] = Op::apply(a[i], b[i]);
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<ResultType> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<ResultType> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = Op::apply(a[i], b); c[i] = Op::apply(a[i], b);
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<ResultType> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<ResultType> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -52,7 +52,7 @@ struct UnaryOperationImpl ...@@ -52,7 +52,7 @@ struct UnaryOperationImpl
{ {
typedef typename Op::ResultType ResultType; typedef typename Op::ResultType ResultType;
static void vector(const PODArray<A> & a, PODArray<ResultType> & c) static void vector(const std::vector<A> & a, std::vector<ResultType> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
......
...@@ -63,9 +63,9 @@ template <typename T> ...@@ -63,9 +63,9 @@ template <typename T>
struct ArrayElementNumImpl struct ArrayElementNumImpl
{ {
static void vector( static void vector(
const PODArray<T> & data, const ColumnArray::Offsets_t & offsets, const std::vector<T> & data, const ColumnArray::Offsets_t & offsets,
const ColumnArray::Offset_t index, /// Передаётся индекс начиная с нуля, а не с единицы. const ColumnArray::Offset_t index, /// Передаётся индекс начиная с нуля, а не с единицы.
PODArray<T> & result) std::vector<T> & result)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
result.resize(size); result.resize(size);
...@@ -87,9 +87,9 @@ struct ArrayElementNumImpl ...@@ -87,9 +87,9 @@ struct ArrayElementNumImpl
struct ArrayElementStringImpl struct ArrayElementStringImpl
{ {
static void vector( static void vector(
const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, const ColumnString::Offsets_t & string_offsets, const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets, const ColumnString::Offsets_t & string_offsets,
const ColumnArray::Offset_t index, /// Передаётся индекс начиная с нуля, а не с единицы. const ColumnArray::Offset_t index, /// Передаётся индекс начиная с нуля, а не с единицы.
PODArray<UInt8> & result_data, ColumnArray::Offsets_t & result_offsets) std::vector<UInt8> & result_data, ColumnArray::Offsets_t & result_offsets)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
result_offsets.resize(size); result_offsets.resize(size);
...@@ -277,9 +277,9 @@ template <typename T, typename IndexConv> ...@@ -277,9 +277,9 @@ template <typename T, typename IndexConv>
struct ArrayIndexNumImpl struct ArrayIndexNumImpl
{ {
static void vector( static void vector(
const PODArray<T> & data, const ColumnArray::Offsets_t & offsets, const std::vector<T> & data, const ColumnArray::Offsets_t & offsets,
const T value, const T value,
PODArray<typename IndexConv::ResultType> & result) std::vector<typename IndexConv::ResultType> & result)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
result.resize(size); result.resize(size);
...@@ -309,9 +309,9 @@ template <typename IndexConv> ...@@ -309,9 +309,9 @@ template <typename IndexConv>
struct ArrayIndexStringImpl struct ArrayIndexStringImpl
{ {
static void vector( static void vector(
const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, const ColumnString::Offsets_t & string_offsets, const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets, const ColumnString::Offsets_t & string_offsets,
const String & value, const String & value,
PODArray<typename IndexConv::ResultType> & result) std::vector<typename IndexConv::ResultType> & result)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
size_t value_size = value.size(); size_t value_size = value.size();
......
...@@ -39,21 +39,21 @@ namespace DB ...@@ -39,21 +39,21 @@ namespace DB
template<typename A, typename B> template<typename A, typename B>
struct EqualsNumImpl struct EqualsNumImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] == b[i]; c[i] = a[i] == b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] == b; c[i] = a[i] == b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -69,9 +69,9 @@ struct EqualsNumImpl ...@@ -69,9 +69,9 @@ struct EqualsNumImpl
struct EqualsStringImpl struct EqualsStringImpl
{ {
static void string_vector_string_vector( static void string_vector_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -82,9 +82,9 @@ struct EqualsStringImpl ...@@ -82,9 +82,9 @@ struct EqualsStringImpl
} }
static void string_vector_fixed_string_vector( static void string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -95,9 +95,9 @@ struct EqualsStringImpl ...@@ -95,9 +95,9 @@ struct EqualsStringImpl
} }
static void string_vector_constant( static void string_vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -110,9 +110,9 @@ struct EqualsStringImpl ...@@ -110,9 +110,9 @@ struct EqualsStringImpl
} }
static void fixed_string_vector_string_vector( static void fixed_string_vector_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -123,9 +123,9 @@ struct EqualsStringImpl ...@@ -123,9 +123,9 @@ struct EqualsStringImpl
} }
static void fixed_string_vector_fixed_string_vector( static void fixed_string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
for (size_t i = 0, j = 0; i < size; i += a_n, ++j) for (size_t i = 0, j = 0; i < size; i += a_n, ++j)
...@@ -133,9 +133,9 @@ struct EqualsStringImpl ...@@ -133,9 +133,9 @@ struct EqualsStringImpl
} }
static void fixed_string_vector_constant( static void fixed_string_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data()); const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data());
...@@ -146,8 +146,8 @@ struct EqualsStringImpl ...@@ -146,8 +146,8 @@ struct EqualsStringImpl
static void constant_string_vector( static void constant_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -161,8 +161,8 @@ struct EqualsStringImpl ...@@ -161,8 +161,8 @@ struct EqualsStringImpl
static void constant_fixed_string_vector( static void constant_fixed_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_data.size(); size_t size = b_data.size();
const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data()); const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data());
...@@ -183,21 +183,21 @@ struct EqualsStringImpl ...@@ -183,21 +183,21 @@ struct EqualsStringImpl
template<typename A, typename B> template<typename A, typename B>
struct NotEqualsNumImpl struct NotEqualsNumImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] != b[i]; c[i] = a[i] != b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] != b; c[i] = a[i] != b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -213,9 +213,9 @@ struct NotEqualsNumImpl ...@@ -213,9 +213,9 @@ struct NotEqualsNumImpl
struct NotEqualsStringImpl struct NotEqualsStringImpl
{ {
static void string_vector_string_vector( static void string_vector_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -226,9 +226,9 @@ struct NotEqualsStringImpl ...@@ -226,9 +226,9 @@ struct NotEqualsStringImpl
} }
static void string_vector_fixed_string_vector( static void string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -239,9 +239,9 @@ struct NotEqualsStringImpl ...@@ -239,9 +239,9 @@ struct NotEqualsStringImpl
} }
static void string_vector_constant( static void string_vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -254,9 +254,9 @@ struct NotEqualsStringImpl ...@@ -254,9 +254,9 @@ struct NotEqualsStringImpl
} }
static void fixed_string_vector_string_vector( static void fixed_string_vector_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -267,9 +267,9 @@ struct NotEqualsStringImpl ...@@ -267,9 +267,9 @@ struct NotEqualsStringImpl
} }
static void fixed_string_vector_fixed_string_vector( static void fixed_string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
for (size_t i = 0, j = 0; i < size; i += a_n, ++j) for (size_t i = 0, j = 0; i < size; i += a_n, ++j)
...@@ -277,9 +277,9 @@ struct NotEqualsStringImpl ...@@ -277,9 +277,9 @@ struct NotEqualsStringImpl
} }
static void fixed_string_vector_constant( static void fixed_string_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data()); const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data());
...@@ -290,8 +290,8 @@ struct NotEqualsStringImpl ...@@ -290,8 +290,8 @@ struct NotEqualsStringImpl
static void constant_string_vector( static void constant_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -305,8 +305,8 @@ struct NotEqualsStringImpl ...@@ -305,8 +305,8 @@ struct NotEqualsStringImpl
static void constant_fixed_string_vector( static void constant_fixed_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_data.size(); size_t size = b_data.size();
const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data()); const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data());
...@@ -327,21 +327,21 @@ struct NotEqualsStringImpl ...@@ -327,21 +327,21 @@ struct NotEqualsStringImpl
template<typename A, typename B> template<typename A, typename B>
struct LessNumImpl struct LessNumImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] < b[i]; c[i] = a[i] < b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] < b; c[i] = a[i] < b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -357,9 +357,9 @@ struct LessNumImpl ...@@ -357,9 +357,9 @@ struct LessNumImpl
struct LessStringImpl struct LessStringImpl
{ {
static void string_vector_string_vector( static void string_vector_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -379,9 +379,9 @@ struct LessStringImpl ...@@ -379,9 +379,9 @@ struct LessStringImpl
} }
static void string_vector_fixed_string_vector( static void string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -401,9 +401,9 @@ struct LessStringImpl ...@@ -401,9 +401,9 @@ struct LessStringImpl
} }
static void string_vector_constant( static void string_vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -425,9 +425,9 @@ struct LessStringImpl ...@@ -425,9 +425,9 @@ struct LessStringImpl
} }
static void fixed_string_vector_string_vector( static void fixed_string_vector_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -447,9 +447,9 @@ struct LessStringImpl ...@@ -447,9 +447,9 @@ struct LessStringImpl
} }
static void fixed_string_vector_fixed_string_vector( static void fixed_string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
for (size_t i = 0, j = 0; i < size; i += a_n, ++j) for (size_t i = 0, j = 0; i < size; i += a_n, ++j)
...@@ -460,9 +460,9 @@ struct LessStringImpl ...@@ -460,9 +460,9 @@ struct LessStringImpl
} }
static void fixed_string_vector_constant( static void fixed_string_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data()); const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data());
...@@ -476,8 +476,8 @@ struct LessStringImpl ...@@ -476,8 +476,8 @@ struct LessStringImpl
static void constant_string_vector( static void constant_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -500,8 +500,8 @@ struct LessStringImpl ...@@ -500,8 +500,8 @@ struct LessStringImpl
static void constant_fixed_string_vector( static void constant_fixed_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_data.size(); size_t size = b_data.size();
const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data()); const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data());
...@@ -525,21 +525,21 @@ struct LessStringImpl ...@@ -525,21 +525,21 @@ struct LessStringImpl
template<typename A, typename B> template<typename A, typename B>
struct GreaterNumImpl struct GreaterNumImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] > b[i]; c[i] = a[i] > b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] > b; c[i] = a[i] > b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -555,9 +555,9 @@ struct GreaterNumImpl ...@@ -555,9 +555,9 @@ struct GreaterNumImpl
struct GreaterStringImpl struct GreaterStringImpl
{ {
static void string_vector_string_vector( static void string_vector_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -577,9 +577,9 @@ struct GreaterStringImpl ...@@ -577,9 +577,9 @@ struct GreaterStringImpl
} }
static void string_vector_fixed_string_vector( static void string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -599,9 +599,9 @@ struct GreaterStringImpl ...@@ -599,9 +599,9 @@ struct GreaterStringImpl
} }
static void string_vector_constant( static void string_vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -623,9 +623,9 @@ struct GreaterStringImpl ...@@ -623,9 +623,9 @@ struct GreaterStringImpl
} }
static void fixed_string_vector_string_vector( static void fixed_string_vector_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -645,9 +645,9 @@ struct GreaterStringImpl ...@@ -645,9 +645,9 @@ struct GreaterStringImpl
} }
static void fixed_string_vector_fixed_string_vector( static void fixed_string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
for (size_t i = 0, j = 0; i < size; i += a_n, ++j) for (size_t i = 0, j = 0; i < size; i += a_n, ++j)
...@@ -658,9 +658,9 @@ struct GreaterStringImpl ...@@ -658,9 +658,9 @@ struct GreaterStringImpl
} }
static void fixed_string_vector_constant( static void fixed_string_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data()); const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data());
...@@ -674,8 +674,8 @@ struct GreaterStringImpl ...@@ -674,8 +674,8 @@ struct GreaterStringImpl
static void constant_string_vector( static void constant_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -698,8 +698,8 @@ struct GreaterStringImpl ...@@ -698,8 +698,8 @@ struct GreaterStringImpl
static void constant_fixed_string_vector( static void constant_fixed_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_data.size(); size_t size = b_data.size();
const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data()); const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data());
...@@ -723,21 +723,21 @@ struct GreaterStringImpl ...@@ -723,21 +723,21 @@ struct GreaterStringImpl
template<typename A, typename B> template<typename A, typename B>
struct LessOrEqualsNumImpl struct LessOrEqualsNumImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] <= b[i]; c[i] = a[i] <= b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] <= b; c[i] = a[i] <= b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -753,9 +753,9 @@ struct LessOrEqualsNumImpl ...@@ -753,9 +753,9 @@ struct LessOrEqualsNumImpl
struct LessOrEqualsStringImpl struct LessOrEqualsStringImpl
{ {
static void string_vector_string_vector( static void string_vector_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -775,9 +775,9 @@ struct LessOrEqualsStringImpl ...@@ -775,9 +775,9 @@ struct LessOrEqualsStringImpl
} }
static void string_vector_fixed_string_vector( static void string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -797,9 +797,9 @@ struct LessOrEqualsStringImpl ...@@ -797,9 +797,9 @@ struct LessOrEqualsStringImpl
} }
static void string_vector_constant( static void string_vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -821,9 +821,9 @@ struct LessOrEqualsStringImpl ...@@ -821,9 +821,9 @@ struct LessOrEqualsStringImpl
} }
static void fixed_string_vector_string_vector( static void fixed_string_vector_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -843,9 +843,9 @@ struct LessOrEqualsStringImpl ...@@ -843,9 +843,9 @@ struct LessOrEqualsStringImpl
} }
static void fixed_string_vector_fixed_string_vector( static void fixed_string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
for (size_t i = 0, j = 0; i < size; i += a_n, ++j) for (size_t i = 0, j = 0; i < size; i += a_n, ++j)
...@@ -856,9 +856,9 @@ struct LessOrEqualsStringImpl ...@@ -856,9 +856,9 @@ struct LessOrEqualsStringImpl
} }
static void fixed_string_vector_constant( static void fixed_string_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data()); const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data());
...@@ -872,8 +872,8 @@ struct LessOrEqualsStringImpl ...@@ -872,8 +872,8 @@ struct LessOrEqualsStringImpl
static void constant_string_vector( static void constant_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -896,8 +896,8 @@ struct LessOrEqualsStringImpl ...@@ -896,8 +896,8 @@ struct LessOrEqualsStringImpl
static void constant_fixed_string_vector( static void constant_fixed_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_data.size(); size_t size = b_data.size();
const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data()); const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data());
...@@ -921,21 +921,21 @@ struct LessOrEqualsStringImpl ...@@ -921,21 +921,21 @@ struct LessOrEqualsStringImpl
template<typename A, typename B> template<typename A, typename B>
struct GreaterOrEqualsNumImpl struct GreaterOrEqualsNumImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] >= b[i]; c[i] = a[i] >= b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] >= b; c[i] = a[i] >= b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -951,9 +951,9 @@ struct GreaterOrEqualsNumImpl ...@@ -951,9 +951,9 @@ struct GreaterOrEqualsNumImpl
struct GreaterOrEqualsStringImpl struct GreaterOrEqualsStringImpl
{ {
static void string_vector_string_vector( static void string_vector_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -973,9 +973,9 @@ struct GreaterOrEqualsStringImpl ...@@ -973,9 +973,9 @@ struct GreaterOrEqualsStringImpl
} }
static void string_vector_fixed_string_vector( static void string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -995,9 +995,9 @@ struct GreaterOrEqualsStringImpl ...@@ -995,9 +995,9 @@ struct GreaterOrEqualsStringImpl
} }
static void string_vector_constant( static void string_vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -1019,9 +1019,9 @@ struct GreaterOrEqualsStringImpl ...@@ -1019,9 +1019,9 @@ struct GreaterOrEqualsStringImpl
} }
static void fixed_string_vector_string_vector( static void fixed_string_vector_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -1041,9 +1041,9 @@ struct GreaterOrEqualsStringImpl ...@@ -1041,9 +1041,9 @@ struct GreaterOrEqualsStringImpl
} }
static void fixed_string_vector_fixed_string_vector( static void fixed_string_vector_fixed_string_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
for (size_t i = 0, j = 0; i < size; i += a_n, ++j) for (size_t i = 0, j = 0; i < size; i += a_n, ++j)
...@@ -1054,9 +1054,9 @@ struct GreaterOrEqualsStringImpl ...@@ -1054,9 +1054,9 @@ struct GreaterOrEqualsStringImpl
} }
static void fixed_string_vector_constant( static void fixed_string_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = a_data.size(); size_t size = a_data.size();
const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data()); const UInt8 * b_data = reinterpret_cast<const UInt8 *>(b.data());
...@@ -1070,8 +1070,8 @@ struct GreaterOrEqualsStringImpl ...@@ -1070,8 +1070,8 @@ struct GreaterOrEqualsStringImpl
static void constant_string_vector( static void constant_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -1094,8 +1094,8 @@ struct GreaterOrEqualsStringImpl ...@@ -1094,8 +1094,8 @@ struct GreaterOrEqualsStringImpl
static void constant_fixed_string_vector( static void constant_fixed_string_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c) std::vector<UInt8> & c)
{ {
size_t size = b_data.size(); size_t size = b_data.size();
const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data()); const UInt8 * a_data = reinterpret_cast<const UInt8 *>(a.data());
......
...@@ -21,9 +21,9 @@ template <typename T> ...@@ -21,9 +21,9 @@ template <typename T>
struct NumIfImpl struct NumIfImpl
{ {
static void vector_vector( static void vector_vector(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
const PODArray<T> & a, const PODArray<T> & b, const std::vector<T> & a, const std::vector<T> & b,
PODArray<T> & res) std::vector<T> & res)
{ {
size_t size = cond.size(); size_t size = cond.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -31,9 +31,9 @@ struct NumIfImpl ...@@ -31,9 +31,9 @@ struct NumIfImpl
} }
static void vector_constant( static void vector_constant(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
const PODArray<T> & a, T b, const std::vector<T> & a, T b,
PODArray<T> & res) std::vector<T> & res)
{ {
size_t size = cond.size(); size_t size = cond.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -41,9 +41,9 @@ struct NumIfImpl ...@@ -41,9 +41,9 @@ struct NumIfImpl
} }
static void constant_vector( static void constant_vector(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
T a, const PODArray<T> & b, T a, const std::vector<T> & b,
PODArray<T> & res) std::vector<T> & res)
{ {
size_t size = cond.size(); size_t size = cond.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -51,9 +51,9 @@ struct NumIfImpl ...@@ -51,9 +51,9 @@ struct NumIfImpl
} }
static void constant_constant( static void constant_constant(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
T a, T b, T a, T b,
PODArray<T> & res) std::vector<T> & res)
{ {
size_t size = cond.size(); size_t size = cond.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -65,10 +65,10 @@ struct NumIfImpl ...@@ -65,10 +65,10 @@ struct NumIfImpl
struct StringIfImpl struct StringIfImpl
{ {
static void vector_vector( static void vector_vector(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = cond.size(); size_t size = cond.size();
c_offsets.resize(size); c_offsets.resize(size);
...@@ -103,10 +103,10 @@ struct StringIfImpl ...@@ -103,10 +103,10 @@ struct StringIfImpl
} }
static void vector_constant( static void vector_constant(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const String & b, const String & b,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = cond.size(); size_t size = cond.size();
c_offsets.resize(size); c_offsets.resize(size);
...@@ -139,10 +139,10 @@ struct StringIfImpl ...@@ -139,10 +139,10 @@ struct StringIfImpl
} }
static void constant_vector( static void constant_vector(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
const String & a, const String & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = cond.size(); size_t size = cond.size();
c_offsets.resize(size); c_offsets.resize(size);
...@@ -175,9 +175,9 @@ struct StringIfImpl ...@@ -175,9 +175,9 @@ struct StringIfImpl
} }
static void constant_constant( static void constant_constant(
const PODArray<UInt8> & cond, const std::vector<UInt8> & cond,
const String & a, const String & b, const String & a, const String & b,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = cond.size(); size_t size = cond.size();
c_offsets.resize(size); c_offsets.resize(size);
...@@ -249,7 +249,7 @@ private: ...@@ -249,7 +249,7 @@ private:
ColumnString * col_res = new ColumnString; ColumnString * col_res = new ColumnString;
block.getByPosition(result).column = col_res; block.getByPosition(result).column = col_res;
PODArray<UInt8> & res_vec = dynamic_cast<ColumnUInt8 &>(col_res->getData()).getData(); std::vector<UInt8> & res_vec = dynamic_cast<ColumnUInt8 &>(col_res->getData()).getData();
ColumnArray::Offsets_t & res_offsets = col_res->getOffsets(); ColumnArray::Offsets_t & res_offsets = col_res->getOffsets();
if (col_then && col_else) if (col_then && col_else)
......
...@@ -162,7 +162,7 @@ struct ConvertImpl<FromDataType, DataTypeString, Name> ...@@ -162,7 +162,7 @@ struct ConvertImpl<FromDataType, DataTypeString, Name>
data_to.resize(size * 2); data_to.resize(size * 2);
offsets_to.resize(size); offsets_to.resize(size);
WriteBufferFromVector<UInt8, PODArray<UInt8> > write_buffer(data_to); WriteBufferFromVector<UInt8> write_buffer(data_to);
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
{ {
......
...@@ -302,8 +302,8 @@ template <typename DurationType> ...@@ -302,8 +302,8 @@ template <typename DurationType>
struct TimeSlotsImpl struct TimeSlotsImpl
{ {
static void vector_vector( static void vector_vector(
const PODArray<UInt32> & starts, const PODArray<DurationType> & durations, const std::vector<UInt32> & starts, const std::vector<DurationType> & durations,
PODArray<UInt32> & result_values, ColumnArray::Offsets_t & result_offsets) std::vector<UInt32> & result_values, ColumnArray::Offsets_t & result_offsets)
{ {
size_t size = starts.size(); size_t size = starts.size();
...@@ -324,8 +324,8 @@ struct TimeSlotsImpl ...@@ -324,8 +324,8 @@ struct TimeSlotsImpl
} }
static void vector_constant( static void vector_constant(
const PODArray<UInt32> & starts, DurationType duration, const std::vector<UInt32> & starts, DurationType duration,
PODArray<UInt32> & result_values, ColumnArray::Offsets_t & result_offsets) std::vector<UInt32> & result_values, ColumnArray::Offsets_t & result_offsets)
{ {
size_t size = starts.size(); size_t size = starts.size();
...@@ -346,8 +346,8 @@ struct TimeSlotsImpl ...@@ -346,8 +346,8 @@ struct TimeSlotsImpl
} }
static void constant_vector( static void constant_vector(
UInt32 start, const PODArray<DurationType> & durations, UInt32 start, const std::vector<DurationType> & durations,
PODArray<UInt32> & result_values, ColumnArray::Offsets_t & result_offsets) std::vector<UInt32> & result_values, ColumnArray::Offsets_t & result_offsets)
{ {
size_t size = durations.size(); size_t size = durations.size();
......
...@@ -74,7 +74,7 @@ public: ...@@ -74,7 +74,7 @@ public:
data_to.resize(size * 2); data_to.resize(size * 2);
offsets_to.resize(size); offsets_to.resize(size);
WriteBufferFromVector<UInt8, PODArray<UInt8> > buf_to(data_to); WriteBufferFromVector<UInt8> buf_to(data_to);
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
{ {
......
...@@ -16,21 +16,21 @@ namespace DB ...@@ -16,21 +16,21 @@ namespace DB
template<typename A, typename B> template<typename A, typename B>
struct AndImpl struct AndImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] && b[i]; c[i] = a[i] && b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] && b; c[i] = a[i] && b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -46,21 +46,21 @@ struct AndImpl ...@@ -46,21 +46,21 @@ struct AndImpl
template<typename A, typename B> template<typename A, typename B>
struct OrImpl struct OrImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] || b[i]; c[i] = a[i] || b[i];
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = a[i] || b; c[i] = a[i] || b;
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -76,21 +76,21 @@ struct OrImpl ...@@ -76,21 +76,21 @@ struct OrImpl
template<typename A, typename B> template<typename A, typename B>
struct XorImpl struct XorImpl
{ {
static void vector_vector(const PODArray<A> & a, const PODArray<B> & b, PODArray<UInt8> & c) static void vector_vector(const std::vector<A> & a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = (a[i] && !b[i]) || (!a[i] && b[i]); c[i] = (a[i] && !b[i]) || (!a[i] && b[i]);
} }
static void vector_constant(const PODArray<A> & a, B b, PODArray<UInt8> & c) static void vector_constant(const std::vector<A> & a, B b, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c[i] = (a[i] && !b) || (!a[i] && b); c[i] = (a[i] && !b) || (!a[i] && b);
} }
static void constant_vector(A a, const PODArray<B> & b, PODArray<UInt8> & c) static void constant_vector(A a, const std::vector<B> & b, std::vector<UInt8> & c)
{ {
size_t size = b.size(); size_t size = b.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -106,7 +106,7 @@ struct XorImpl ...@@ -106,7 +106,7 @@ struct XorImpl
template<typename A> template<typename A>
struct NotImpl struct NotImpl
{ {
static void vector(const PODArray<A> & a, PODArray<UInt8> & c) static void vector(const std::vector<A> & a, std::vector<UInt8> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
......
...@@ -44,7 +44,7 @@ namespace DB ...@@ -44,7 +44,7 @@ namespace DB
template <typename T> template <typename T>
static void numWidthVector(const PODArray<T> & a, PODArray<UInt64> & c) static void numWidthVector(const std::vector<T> & a, std::vector<UInt64> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -81,7 +81,7 @@ inline UInt64 floatWidth(double x) ...@@ -81,7 +81,7 @@ inline UInt64 floatWidth(double x)
} }
template <typename T> template <typename T>
static void floatWidthVector(const PODArray<T> & a, PODArray<UInt64> & c) static void floatWidthVector(const std::vector<T> & a, std::vector<UInt64> & c)
{ {
size_t size = a.size(); size_t size = a.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -94,8 +94,8 @@ static void floatWidthConstant(T a, UInt64 & c) ...@@ -94,8 +94,8 @@ static void floatWidthConstant(T a, UInt64 & c)
c = floatWidth(a); c = floatWidth(a);
} }
template <> inline void numWidthVector<Float64>(const PODArray<Float64> & a, PODArray<UInt64> & c) { floatWidthVector(a, c); } template <> inline void numWidthVector<Float64>(const std::vector<Float64> & a, std::vector<UInt64> & c) { floatWidthVector(a, c); }
template <> inline void numWidthVector<Float32>(const PODArray<Float32> & a, PODArray<UInt64> & c) { floatWidthVector(a, c); } template <> inline void numWidthVector<Float32>(const std::vector<Float32> & a, std::vector<UInt64> & c) { floatWidthVector(a, c); }
template <> inline void numWidthConstant<Float64>(Float64 a, UInt64 & c) { floatWidthConstant(a, c); } template <> inline void numWidthConstant<Float64>(Float64 a, UInt64 & c) { floatWidthConstant(a, c); }
template <> inline void numWidthConstant<Float32>(Float32 a, UInt64 & c) { floatWidthConstant(a, c); } template <> inline void numWidthConstant<Float32>(Float32 a, UInt64 & c) { floatWidthConstant(a, c); }
...@@ -112,7 +112,7 @@ static inline UInt64 stringWidth(const UInt8 * pos, const UInt8 * end) ...@@ -112,7 +112,7 @@ static inline UInt64 stringWidth(const UInt8 * pos, const UInt8 * end)
return res; return res;
} }
static inline void stringWidthVector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, PODArray<UInt64> & res) static inline void stringWidthVector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets, std::vector<UInt64> & res)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
...@@ -124,7 +124,7 @@ static inline void stringWidthVector(const PODArray<UInt8> & data, const ColumnA ...@@ -124,7 +124,7 @@ static inline void stringWidthVector(const PODArray<UInt8> & data, const ColumnA
} }
} }
static inline void stringWidthFixedVector(const PODArray<UInt8> & data, size_t n, PODArray<UInt64> & res) static inline void stringWidthFixedVector(const std::vector<UInt8> & data, size_t n, std::vector<UInt64> & res)
{ {
size_t size = data.size() / n; size_t size = data.size() / n;
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
......
...@@ -43,7 +43,7 @@ struct RandImpl ...@@ -43,7 +43,7 @@ struct RandImpl
{ {
typedef UInt32 ReturnType; typedef UInt32 ReturnType;
static void execute(PODArray<ReturnType> & res) static void execute(std::vector<ReturnType> & res)
{ {
drand48_data rand_state; drand48_data rand_state;
detail::seed(rand_state); detail::seed(rand_state);
...@@ -62,7 +62,7 @@ struct Rand64Impl ...@@ -62,7 +62,7 @@ struct Rand64Impl
{ {
typedef UInt64 ReturnType; typedef UInt64 ReturnType;
static void execute(PODArray<ReturnType> & res) static void execute(std::vector<ReturnType> & res)
{ {
drand48_data rand_state; drand48_data rand_state;
detail::seed(rand_state); detail::seed(rand_state);
......
...@@ -45,8 +45,8 @@ namespace DB ...@@ -45,8 +45,8 @@ namespace DB
template <bool negative = false> template <bool negative = false>
struct EmptyImpl struct EmptyImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res) std::vector<UInt8> & res)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
ColumnArray::Offset_t prev_offset = 1; ColumnArray::Offset_t prev_offset = 1;
...@@ -57,14 +57,14 @@ struct EmptyImpl ...@@ -57,14 +57,14 @@ struct EmptyImpl
} }
} }
static void vector_fixed_to_constant(const PODArray<UInt8> & data, size_t n, static void vector_fixed_to_constant(const std::vector<UInt8> & data, size_t n,
UInt8 & res) UInt8 & res)
{ {
res = negative ^ (n == 0); res = negative ^ (n == 0);
} }
static void vector_fixed_to_vector(const PODArray<UInt8> & data, size_t n, static void vector_fixed_to_vector(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res) std::vector<UInt8> & res)
{ {
} }
...@@ -73,7 +73,7 @@ struct EmptyImpl ...@@ -73,7 +73,7 @@ struct EmptyImpl
res = negative ^ (data.empty()); res = negative ^ (data.empty());
} }
static void array(const ColumnArray::Offsets_t & offsets, PODArray<UInt8> & res) static void array(const ColumnArray::Offsets_t & offsets, std::vector<UInt8> & res)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
ColumnArray::Offset_t prev_offset = 0; ColumnArray::Offset_t prev_offset = 0;
...@@ -95,8 +95,8 @@ struct EmptyImpl ...@@ -95,8 +95,8 @@ struct EmptyImpl
*/ */
struct LengthImpl struct LengthImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt64> & res) std::vector<UInt64> & res)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -105,14 +105,14 @@ struct LengthImpl ...@@ -105,14 +105,14 @@ struct LengthImpl
: (offsets[i] - 1 - offsets[i - 1]); : (offsets[i] - 1 - offsets[i - 1]);
} }
static void vector_fixed_to_constant(const PODArray<UInt8> & data, size_t n, static void vector_fixed_to_constant(const std::vector<UInt8> & data, size_t n,
UInt64 & res) UInt64 & res)
{ {
res = n; res = n;
} }
static void vector_fixed_to_vector(const PODArray<UInt8> & data, size_t n, static void vector_fixed_to_vector(const std::vector<UInt8> & data, size_t n,
PODArray<UInt64> & res) std::vector<UInt64> & res)
{ {
} }
...@@ -121,7 +121,7 @@ struct LengthImpl ...@@ -121,7 +121,7 @@ struct LengthImpl
res = data.size(); res = data.size();
} }
static void array(const ColumnArray::Offsets_t & offsets, PODArray<UInt64> & res) static void array(const ColumnArray::Offsets_t & offsets, std::vector<UInt64> & res)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
...@@ -143,8 +143,8 @@ struct LengthImpl ...@@ -143,8 +143,8 @@ struct LengthImpl
*/ */
struct LengthUTF8Impl struct LengthUTF8Impl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt64> & res) std::vector<UInt64> & res)
{ {
size_t size = offsets.size(); size_t size = offsets.size();
...@@ -159,13 +159,13 @@ struct LengthUTF8Impl ...@@ -159,13 +159,13 @@ struct LengthUTF8Impl
} }
} }
static void vector_fixed_to_constant(const PODArray<UInt8> & data, size_t n, static void vector_fixed_to_constant(const std::vector<UInt8> & data, size_t n,
UInt64 & res) UInt64 & res)
{ {
} }
static void vector_fixed_to_vector(const PODArray<UInt8> & data, size_t n, static void vector_fixed_to_vector(const std::vector<UInt8> & data, size_t n,
PODArray<UInt64> & res) std::vector<UInt64> & res)
{ {
size_t size = data.size() / n; size_t size = data.size() / n;
...@@ -186,7 +186,7 @@ struct LengthUTF8Impl ...@@ -186,7 +186,7 @@ struct LengthUTF8Impl
++res; ++res;
} }
static void array(const ColumnArray::Offsets_t & offsets, PODArray<UInt64> & res) static void array(const ColumnArray::Offsets_t & offsets, std::vector<UInt64> & res)
{ {
throw Exception("Cannot apply function lengthUTF8 to Array argument", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); throw Exception("Cannot apply function lengthUTF8 to Array argument", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
} }
...@@ -203,16 +203,16 @@ struct LengthUTF8Impl ...@@ -203,16 +203,16 @@ struct LengthUTF8Impl
template <int F(int)> template <int F(int)>
struct LowerUpperImpl struct LowerUpperImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
res_offsets.assign(offsets); res_offsets = offsets;
array(&*data.begin(), &*data.end(), &*res_data.begin()); array(&*data.begin(), &*data.end(), &*res_data.begin());
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
array(&*data.begin(), &*data.end(), &*res_data.begin()); array(&*data.begin(), &*data.end(), &*res_data.begin());
...@@ -242,16 +242,16 @@ private: ...@@ -242,16 +242,16 @@ private:
template <int F(int)> template <int F(int)>
struct LowerUpperUTF8Impl struct LowerUpperUTF8Impl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
res_offsets.assign(offsets); res_offsets = offsets;
array(&*data.begin(), &*data.end(), &*res_data.begin()); array(&*data.begin(), &*data.end(), &*res_data.begin());
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
array(&*data.begin(), &*data.end(), &*res_data.begin()); array(&*data.begin(), &*data.end(), &*res_data.begin());
...@@ -291,11 +291,11 @@ private: ...@@ -291,11 +291,11 @@ private:
*/ */
struct ReverseImpl struct ReverseImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
res_offsets.assign(offsets); res_offsets = offsets;
size_t size = offsets.size(); size_t size = offsets.size();
ColumnArray::Offset_t prev_offset = 0; ColumnArray::Offset_t prev_offset = 0;
...@@ -308,8 +308,8 @@ struct ReverseImpl ...@@ -308,8 +308,8 @@ struct ReverseImpl
} }
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
size_t size = data.size() / n; size_t size = data.size() / n;
...@@ -334,11 +334,11 @@ struct ReverseImpl ...@@ -334,11 +334,11 @@ struct ReverseImpl
*/ */
struct ReverseUTF8Impl struct ReverseUTF8Impl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.resize(data.size()); res_data.resize(data.size());
res_offsets.assign(offsets); res_offsets = offsets;
size_t size = offsets.size(); size_t size = offsets.size();
ColumnArray::Offset_t prev_offset = 0; ColumnArray::Offset_t prev_offset = 0;
...@@ -374,8 +374,8 @@ struct ReverseUTF8Impl ...@@ -374,8 +374,8 @@ struct ReverseUTF8Impl
} }
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
throw Exception("Cannot apply function reverseUTF8 to fixed string.", ErrorCodes::ILLEGAL_COLUMN); throw Exception("Cannot apply function reverseUTF8 to fixed string.", ErrorCodes::ILLEGAL_COLUMN);
} }
...@@ -417,9 +417,9 @@ struct ReverseUTF8Impl ...@@ -417,9 +417,9 @@ struct ReverseUTF8Impl
struct ConcatImpl struct ConcatImpl
{ {
static void vector_vector( static void vector_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
c_data.resize(a_data.size() + b_data.size() - size); c_data.resize(a_data.size() + b_data.size() - size);
...@@ -443,9 +443,9 @@ struct ConcatImpl ...@@ -443,9 +443,9 @@ struct ConcatImpl
} }
static void vector_fixed_vector( static void vector_fixed_vector(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
c_data.resize(a_data.size() + b_data.size()); c_data.resize(a_data.size() + b_data.size());
...@@ -471,13 +471,13 @@ struct ConcatImpl ...@@ -471,13 +471,13 @@ struct ConcatImpl
} }
static void vector_constant( static void vector_constant(
const PODArray<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets, const std::vector<UInt8> & a_data, const ColumnArray::Offsets_t & a_offsets,
const std::string & b, const std::string & b,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = a_offsets.size(); size_t size = a_offsets.size();
c_data.resize(a_data.size() + b.size() * size); c_data.resize(a_data.size() + b.size() * size);
c_offsets.assign(a_offsets); c_offsets = a_offsets;
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c_offsets[i] += b.size() * (i + 1); c_offsets[i] += b.size() * (i + 1);
...@@ -496,9 +496,9 @@ struct ConcatImpl ...@@ -496,9 +496,9 @@ struct ConcatImpl
} }
static void fixed_vector_vector( static void fixed_vector_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
c_data.resize(a_data.size() + b_data.size()); c_data.resize(a_data.size() + b_data.size());
...@@ -522,9 +522,9 @@ struct ConcatImpl ...@@ -522,9 +522,9 @@ struct ConcatImpl
} }
static void fixed_vector_fixed_vector( static void fixed_vector_fixed_vector(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c_data) std::vector<UInt8> & c_data)
{ {
size_t size = a_data.size() / a_n; size_t size = a_data.size() / a_n;
c_data.resize(a_data.size() + b_data.size()); c_data.resize(a_data.size() + b_data.size());
...@@ -538,9 +538,9 @@ struct ConcatImpl ...@@ -538,9 +538,9 @@ struct ConcatImpl
} }
static void fixed_vector_constant( static void fixed_vector_constant(
const PODArray<UInt8> & a_data, ColumnArray::Offset_t a_n, const std::vector<UInt8> & a_data, ColumnArray::Offset_t a_n,
const std::string & b, const std::string & b,
PODArray<UInt8> & c_data) std::vector<UInt8> & c_data)
{ {
size_t size = a_data.size() / a_n; size_t size = a_data.size() / a_n;
ColumnArray::Offset_t b_n = b.size(); ColumnArray::Offset_t b_n = b.size();
...@@ -556,12 +556,12 @@ struct ConcatImpl ...@@ -556,12 +556,12 @@ struct ConcatImpl
static void constant_vector( static void constant_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets, const std::vector<UInt8> & b_data, const ColumnArray::Offsets_t & b_offsets,
PODArray<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets) std::vector<UInt8> & c_data, ColumnArray::Offsets_t & c_offsets)
{ {
size_t size = b_offsets.size(); size_t size = b_offsets.size();
c_data.resize(b_data.size() + a.size() * size); c_data.resize(b_data.size() + a.size() * size);
c_offsets.assign(b_offsets); c_offsets = b_offsets;
for (size_t i = 0; i < size; ++i) for (size_t i = 0; i < size; ++i)
c_offsets[i] += a.size() * (i + 1); c_offsets[i] += a.size() * (i + 1);
...@@ -581,8 +581,8 @@ struct ConcatImpl ...@@ -581,8 +581,8 @@ struct ConcatImpl
static void constant_fixed_vector( static void constant_fixed_vector(
const std::string & a, const std::string & a,
const PODArray<UInt8> & b_data, ColumnArray::Offset_t b_n, const std::vector<UInt8> & b_data, ColumnArray::Offset_t b_n,
PODArray<UInt8> & c_data) std::vector<UInt8> & c_data)
{ {
size_t size = b_data.size() / b_n; size_t size = b_data.size() / b_n;
ColumnArray::Offset_t a_n = a.size(); ColumnArray::Offset_t a_n = a.size();
...@@ -610,9 +610,9 @@ struct ConcatImpl ...@@ -610,9 +610,9 @@ struct ConcatImpl
*/ */
struct SubstringImpl struct SubstringImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
size_t start, size_t length, size_t start, size_t length,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.reserve(data.size()); res_data.reserve(data.size());
size_t size = offsets.size(); size_t size = offsets.size();
...@@ -641,9 +641,9 @@ struct SubstringImpl ...@@ -641,9 +641,9 @@ struct SubstringImpl
} }
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
size_t start, size_t length, size_t start, size_t length,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
if (length == 0 || start + length > n + 1) if (length == 0 || start + length > n + 1)
throw Exception("Index out of bound for function substring of fixed size value", ErrorCodes::ARGUMENT_OUT_OF_BOUND); throw Exception("Index out of bound for function substring of fixed size value", ErrorCodes::ARGUMENT_OUT_OF_BOUND);
...@@ -672,9 +672,9 @@ struct SubstringImpl ...@@ -672,9 +672,9 @@ struct SubstringImpl
*/ */
struct SubstringUTF8Impl struct SubstringUTF8Impl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
size_t start, size_t length, size_t start, size_t length,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.reserve(data.size()); res_data.reserve(data.size());
size_t size = offsets.size(); size_t size = offsets.size();
...@@ -729,9 +729,9 @@ struct SubstringUTF8Impl ...@@ -729,9 +729,9 @@ struct SubstringUTF8Impl
} }
} }
static void vector_fixed(const PODArray<UInt8> & data, ColumnArray::Offset_t n, static void vector_fixed(const std::vector<UInt8> & data, ColumnArray::Offset_t n,
size_t start, size_t length, size_t start, size_t length,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
throw Exception("Cannot apply function substringUTF8 to fixed string.", ErrorCodes::ILLEGAL_COLUMN); throw Exception("Cannot apply function substringUTF8 to fixed string.", ErrorCodes::ILLEGAL_COLUMN);
} }
......
...@@ -41,9 +41,9 @@ struct PositionImpl ...@@ -41,9 +41,9 @@ struct PositionImpl
typedef UInt64 ResultType; typedef UInt64 ResultType;
/// Предполагается, что res нужного размера и инициализирован нулями. /// Предполагается, что res нужного размера и инициализирован нулями.
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
const std::string & needle, const std::string & needle,
PODArray<UInt64> & res) std::vector<UInt64> & res)
{ {
const UInt8 * begin = &data[0]; const UInt8 * begin = &data[0];
const UInt8 * pos = begin; const UInt8 * pos = begin;
...@@ -83,9 +83,9 @@ struct PositionUTF8Impl ...@@ -83,9 +83,9 @@ struct PositionUTF8Impl
{ {
typedef UInt64 ResultType; typedef UInt64 ResultType;
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
const std::string & needle, const std::string & needle,
PODArray<UInt64> & res) std::vector<UInt64> & res)
{ {
const UInt8 * begin = &data[0]; const UInt8 * begin = &data[0];
const UInt8 * pos = begin; const UInt8 * pos = begin;
...@@ -260,9 +260,9 @@ struct MatchImpl ...@@ -260,9 +260,9 @@ struct MatchImpl
{ {
typedef UInt8 ResultType; typedef UInt8 ResultType;
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
const std::string & pattern, const std::string & pattern,
PODArray<UInt8> & res) std::vector<UInt8> & res)
{ {
String strstr_pattern; String strstr_pattern;
/// Простой случай, когда выражение LIKE сводится к поиску подстроки в строке /// Простой случай, когда выражение LIKE сводится к поиску подстроки в строке
......
...@@ -261,8 +261,8 @@ struct ExtractWWW ...@@ -261,8 +261,8 @@ struct ExtractWWW
template <typename Extractor> template <typename Extractor>
struct ExtractSubstringImpl struct ExtractSubstringImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.reserve(data.size() * Extractor::getReserveLengthForElement()); res_data.reserve(data.size() * Extractor::getReserveLengthForElement());
size_t size = offsets.size(); size_t size = offsets.size();
...@@ -298,8 +298,8 @@ struct ExtractSubstringImpl ...@@ -298,8 +298,8 @@ struct ExtractSubstringImpl
res_data.assign(start, length); res_data.assign(start, length);
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
throw Exception("Column of type FixedString is not supported by URL functions", ErrorCodes::ILLEGAL_COLUMN); throw Exception("Column of type FixedString is not supported by URL functions", ErrorCodes::ILLEGAL_COLUMN);
} }
...@@ -311,8 +311,8 @@ struct ExtractSubstringImpl ...@@ -311,8 +311,8 @@ struct ExtractSubstringImpl
template <typename Extractor> template <typename Extractor>
struct CutSubstringImpl struct CutSubstringImpl
{ {
static void vector(const PODArray<UInt8> & data, const ColumnArray::Offsets_t & offsets, static void vector(const std::vector<UInt8> & data, const ColumnArray::Offsets_t & offsets,
PODArray<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets) std::vector<UInt8> & res_data, ColumnArray::Offsets_t & res_offsets)
{ {
res_data.reserve(data.size()); res_data.reserve(data.size());
size_t size = offsets.size(); size_t size = offsets.size();
...@@ -350,8 +350,8 @@ struct CutSubstringImpl ...@@ -350,8 +350,8 @@ struct CutSubstringImpl
res_data.erase(start - data.data(), length); res_data.erase(start - data.data(), length);
} }
static void vector_fixed(const PODArray<UInt8> & data, size_t n, static void vector_fixed(const std::vector<UInt8> & data, size_t n,
PODArray<UInt8> & res_data) std::vector<UInt8> & res_data)
{ {
throw Exception("Column of type FixedString is not supported by URL functions", ErrorCodes::ILLEGAL_COLUMN); throw Exception("Column of type FixedString is not supported by URL functions", ErrorCodes::ILLEGAL_COLUMN);
} }
......
...@@ -14,10 +14,11 @@ namespace DB ...@@ -14,10 +14,11 @@ namespace DB
/** Инициализируется вектором. Пишет данные в него. Когда вектор закончится - увеличивает его размер в два раза. /** Инициализируется вектором. Пишет данные в него. Когда вектор закончится - увеличивает его размер в два раза.
* CharType - char или unsigned char. * CharType - char или unsigned char.
*/ */
template <typename CharType, typename VectorType = std::vector<CharType> > template <typename CharType>
class WriteBufferFromVector : public WriteBuffer class WriteBufferFromVector : public WriteBuffer
{ {
private: private:
typedef std::vector<CharType> VectorType;
VectorType & vector; VectorType & vector;
void nextImpl() void nextImpl()
......
#include <iostream>
#include <iomanip>
#include <vector>
#include <cassert>
#include <Poco/NumberFormatter.h>
#include <DB/Core/Types.h>
#include <DB/Common/PODArray.h>
#include <statdaemons/Stopwatch.h>
int main(int argc, char ** argv)
{
try
{
typedef UInt16 Value;
typedef DB::PODArray<Value> Arr;
std::cerr << std::fixed << std::setprecision(3) << std::endl;
{
Arr arr;
assert(arr.size() == 0);
arr.push_back(1);
assert(arr.size() == 1);
arr.clear();
assert(arr.size() == 0);
arr.reserve(1000000);
assert(arr.capacity() >= 1000000);
arr.resize(10);
assert(arr.size() == 10);
assert(arr.capacity() >= 1000000);
arr.front() = 12;
arr.back() = 34;
arr[5] = 56;
Arr arr2(10);
arr2.front() = 12;
arr2.back() = 34;
arr2[5] = 56;
arr.insert(arr2.begin(), arr2.end());
assert(arr.size() == 20);
assert(arr.capacity() >= 1000000);
assert(arr[0] == 12);
assert(arr[9] == 34);
assert(arr[5] == 56);
assert(arr[10] == 12);
assert(arr[19] == 34);
assert(arr[15] == 56);
Arr().swap(arr);
assert(arr.size() == 0);
assert(arr.capacity() < 1000000);
arr.resize(4090);
arr.insert(arr2.begin(), arr2.end());
assert(arr.size() == 4100);
assert(arr.capacity() == 8192);
assert(arr[4090] == 12);
assert(arr[4099] == 34);
assert(arr[4095] == 56);
}
{
Arr arr(4096);
arr.push_back(123);
std::cerr << "size: " << arr.size() << ", capacity: " << arr.capacity() << std::endl;
for (Arr::const_iterator it = arr.begin(); it != arr.end(); ++it)
std::cerr << (it != arr.begin() ? ", " : "") << *it;
std::cerr << std::endl;
}
{
Arr arr;
for (size_t i = 0; i < 10000; ++i)
arr.push_back(i);
std::cerr << "size: " << arr.size() << ", capacity: " << arr.capacity() << std::endl;
for (Arr::const_iterator it = arr.begin(); it != arr.end(); ++it)
std::cerr << (it != arr.begin() ? ", " : "") << *it;
std::cerr << std::endl;
}
{
Arr arr;
arr.resize(10000);
for (size_t i = 0; i < 10000; ++i)
arr[i] = i;
std::cerr << "size: " << arr.size() << ", capacity: " << arr.capacity() << std::endl;
for (Arr::const_iterator it = arr.begin(); it != arr.end(); ++it)
std::cerr << (it != arr.begin() ? ", " : "") << *it;
std::cerr << std::endl;
}
{
Arr arr;
size_t n = 100000000;
Stopwatch watch;
for (size_t i = 0; i < n; ++i)
arr.push_back(i);
watch.stop();
std::cerr << "size: " << arr.size() << ", capacity: " << arr.capacity() << std::endl;
std::cerr << "PODArray: " << watch.elapsedSeconds() << " sec., "
<< n / watch.elapsedSeconds() << " elems/sec., "
<< n * sizeof(Value) / watch.elapsedSeconds() / 1000000 << " MB/sec."
<< std::endl;
}
{
std::vector<Value> arr;
size_t n = 100000000;
Stopwatch watch;
for (size_t i = 0; i < n; ++i)
arr.push_back(i);
watch.stop();
std::cerr << "size: " << arr.size() << ", capacity: " << arr.capacity() << std::endl;
std::cerr << "std::vector: " << watch.elapsedSeconds() << " sec., "
<< n / watch.elapsedSeconds() << " elems/sec., "
<< n * sizeof(Value) / watch.elapsedSeconds() / 1000000 << " MB/sec."
<< std::endl;
}
}
catch (const DB::Exception & e)
{
std::cerr << e.displayText() << std::endl;
return 1;
}
return 0;
}
...@@ -60,7 +60,7 @@ int main(int argc, char ** argv) ...@@ -60,7 +60,7 @@ int main(int argc, char ** argv)
column_x.type = new DB::DataTypeInt16; column_x.type = new DB::DataTypeInt16;
DB::ColumnInt16 * x = new DB::ColumnInt16; DB::ColumnInt16 * x = new DB::ColumnInt16;
column_x.column = x; column_x.column = x;
DB::PODArray<Int16> & vec_x = x->getData(); std::vector<Int16> & vec_x = x->getData();
vec_x.resize(n); vec_x.resize(n);
for (size_t i = 0; i < n; ++i) for (size_t i = 0; i < n; ++i)
......
...@@ -42,10 +42,9 @@ void sortBlock(Block & block, const SortDescription & description) ...@@ -42,10 +42,9 @@ void sortBlock(Block & block, const SortDescription & description)
/// Если столбец сортировки один /// Если столбец сортировки один
if (description.size() == 1) if (description.size() == 1)
{ {
IColumn::Permutation perm; IColumn::Permutation perm = (!description[0].column_name.empty()
(!description[0].column_name.empty()
? block.getByName(description[0].column_name).column ? block.getByName(description[0].column_name).column
: block.getByPosition(description[0].column_number).column)->getPermutation(perm); : block.getByPosition(description[0].column_number).column)->getPermutation();
if (description[0].direction == -1) if (description[0].direction == -1)
for (size_t i = 0, size = perm.size(); i < size / 2; ++i) for (size_t i = 0, size = perm.size(); i < size / 2; ++i)
......
...@@ -54,7 +54,7 @@ int main(int argc, char ** argv) ...@@ -54,7 +54,7 @@ int main(int argc, char ** argv)
column_x.type = new DB::DataTypeInt16; column_x.type = new DB::DataTypeInt16;
DB::ColumnInt16 * x = new DB::ColumnInt16; DB::ColumnInt16 * x = new DB::ColumnInt16;
column_x.column = x; column_x.column = x;
DB::PODArray<Int16> & vec_x = x->getData(); std::vector<Int16> & vec_x = x->getData();
vec_x.resize(n); vec_x.resize(n);
for (size_t i = 0; i < n; ++i) for (size_t i = 0; i < n; ++i)
......
...@@ -124,7 +124,7 @@ int main(int argc, char ** argv) ...@@ -124,7 +124,7 @@ int main(int argc, char ** argv)
column_x.type = new DB::DataTypeInt16; column_x.type = new DB::DataTypeInt16;
DB::ColumnInt16 * x = new DB::ColumnInt16; DB::ColumnInt16 * x = new DB::ColumnInt16;
column_x.column = x; column_x.column = x;
DB::PODArray<Int16> & vec_x = x->getData(); std::vector<Int16> & vec_x = x->getData();
vec_x.resize(n); vec_x.resize(n);
for (size_t i = 0; i < n; ++i) for (size_t i = 0; i < n; ++i)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册