dbms: Server: simplified code [#METR-19697]

This commit is contained in:
Alexey Arno 2016-04-22 13:21:52 +03:00
parent 3d9dc30e8c
commit 52b6eceb51
5 changed files with 9 additions and 44 deletions

View File

@ -288,8 +288,8 @@ class ArrayEvaluator final
public:
static void perform(const Branches & branches, Block & block, const ColumnNumbers & args, size_t result)
{
size_t row_count = getRowCount(block, args);
const CondSources conds = createConds(block, args);
size_t row_count = conds[0].getSize();
IArraySources<TResult> sources = createSources(block, args, branches);
ArraySink<TResult> sink = createSink(block, sources, result, row_count);
@ -384,16 +384,6 @@ private:
return ArraySink<TResult>{col_res_vec->getData(), col_res_array->getOffsets(),
data_size, offsets_size};
}
static size_t getRowCount(const Block & block, const ColumnNumbers & args)
{
const IColumn * col = &*block.getByPosition(args[0]).column;
const auto * cond_col = typeid_cast<const ColumnVector<UInt8> *>(col);
if (cond_col == nullptr)
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
const PaddedPODArray<UInt8> & cond_data = cond_col->getData();
return cond_data.size();
}
};
/// Processing of multiIf in the case of an invalid return type.

View File

@ -28,6 +28,11 @@ public:
return data_array[row];
}
inline UInt8 getSize() const
{
return data_array.size();
}
private:
static const ColumnPtr initMaterializedCol(const Block & block, const ColumnNumbers & args, size_t i);

View File

@ -137,7 +137,7 @@ public:
{
const CondSources conds = createConds(block, args);
const NumericSources<TResult> sources = createNumericSources(block, args, branches);
size_t row_count = getRowCount(block, args);
size_t row_count = conds[0].getSize();
PaddedPODArray<TResult> & res = createSink(block, result, row_count);
for (size_t cur_row = 0; cur_row < row_count; ++cur_row)
@ -209,16 +209,6 @@ private:
return sources;
}
static size_t getRowCount(const Block & block, const ColumnNumbers & args)
{
const IColumn * col = &*block.getByPosition(args[0]).column;
const auto * cond_col = typeid_cast<const ColumnVector<UInt8> *>(col);
if (cond_col == nullptr)
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
const PaddedPODArray<UInt8> & cond_data = cond_col->getData();
return cond_data.size();
}
};
/// Processing of multiIf in the case of an invalid return type.

View File

@ -366,16 +366,6 @@ VarStringArraySink createSink(Block & block, const StringArraySources & sources,
var_col_res->getOffsets(), data_size, offsets_size, row_count};
}
size_t getRowCount(const Block & block, const ColumnNumbers & args)
{
const IColumn * col = &*block.getByPosition(args[0]).column;
const auto * cond_col = typeid_cast<const ColumnVector<UInt8> *>(col);
if (cond_col == nullptr)
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
const PaddedPODArray<UInt8> & cond_data = cond_col->getData();
return cond_data.size();
}
}
/// Process a multiIf.
@ -385,8 +375,8 @@ bool StringArrayEvaluator::perform(Block & block, const ColumnNumbers & args, si
if (!createStringArraySources(sources, block, args))
return false;
size_t row_count = getRowCount(block, args);
const CondSources conds = createConds(block, args);
size_t row_count = conds[0].getSize();
VarStringArraySink sink = createSink(block, sources, result, row_count);
for (size_t cur_row = 0; cur_row < row_count; ++cur_row)

View File

@ -385,16 +385,6 @@ size_t computeResultSize(const StringSources & sources, size_t row_count)
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
}
size_t getRowCount(const Block & block, const ColumnNumbers & args)
{
const IColumn * col = &*block.getByPosition(args[0]).column;
const auto * cond_col = typeid_cast<const ColumnVector<UInt8> *>(col);
if (cond_col == nullptr)
throw Exception{"Internal error", ErrorCodes::LOGICAL_ERROR};
const PaddedPODArray<UInt8> & cond_data = cond_col->getData();
return cond_data.size();
}
/// Updates a fixed or variable string sink.
template <typename SinkType>
class SinkUpdater
@ -500,8 +490,8 @@ bool StringEvaluator::perform(Block & block, const ColumnNumbers & args, size_t
if (!createStringSources(sources, block, args))
return false;
size_t row_count = getRowCount(block, args);
const CondSources conds = createConds(block, args);
size_t row_count = conds[0].getSize();
bool has_only_fixed_sources = true;
for (const auto & source : sources)