dbms: Cleanup [#METR-19266]

This commit is contained in:
Alexey Arno 2016-08-05 10:49:56 +03:00
parent 2e15882f5d
commit e38d29346e
3 changed files with 26 additions and 30 deletions

View File

@ -78,8 +78,6 @@ public:
const ColumnWithTypeAndName & getByName(const std::string & name) const; const ColumnWithTypeAndName & getByName(const std::string & name) const;
bool has(const std::string & name) const; bool has(const std::string & name) const;
bool hasNullColumns(const ColumnNumbers & arguments) const;
bool hasNullableColumns(const ColumnNumbers & arguments) const;
size_t getPositionByName(const std::string & name) const; size_t getPositionByName(const std::string & name) const;

View File

@ -249,30 +249,6 @@ bool Block::has(const std::string & name) const
} }
bool Block::hasNullColumns(const ColumnNumbers & arguments) const
{
for (const auto & arg : arguments)
{
const auto & elem = unsafeGetByPosition(arg);
if (elem.column && elem.column.get()->isNull())
return true;
}
return false;
}
bool Block::hasNullableColumns(const ColumnNumbers & arguments) const
{
for (const auto & arg : arguments)
{
const auto & elem = unsafeGetByPosition(arg);
if (elem.column && elem.column.get()->isNullable())
return true;
}
return false;
}
size_t Block::getPositionByName(const std::string & name) const size_t Block::getPositionByName(const std::string & name) const
{ {
IndexByName_t::const_iterator it = index_by_name.find(name); IndexByName_t::const_iterator it = index_by_name.find(name);

View File

@ -29,6 +29,17 @@ void createNullValuesByteMap(Block & block, size_t result)
} }
} }
bool hasNullColumns(const Block & block, const ColumnNumbers & arguments) const
{
for (const auto & arg : arguments)
{
const auto & elem = block.unsafeGetByPosition(arg);
if (elem.column && elem.column.get()->isNull())
return true;
}
return false;
}
bool hasNullColumns(const ColumnsWithTypeAndName & args) bool hasNullColumns(const ColumnsWithTypeAndName & args)
{ {
for (const auto & arg : args) for (const auto & arg : args)
@ -51,6 +62,17 @@ bool hasNullColumns(const DataTypes & args)
return false; return false;
} }
bool hasNullableColumns(const Block & block, const ColumnNumbers & arguments) const
{
for (const auto & arg : arguments)
{
const auto & elem = block.unsafeGetByPosition(arg);
if (elem.column && elem.column.get()->isNullable())
return true;
}
return false;
}
bool hasNullableColumns(const ColumnsWithTypeAndName & args) bool hasNullableColumns(const ColumnsWithTypeAndName & args)
{ {
for (const auto & arg : args) for (const auto & arg : args)
@ -170,14 +192,14 @@ void IFunction::getLambdaArgumentTypes(DataTypes & arguments) const
void IFunction::execute(Block & block, const ColumnNumbers & arguments, size_t result) void IFunction::execute(Block & block, const ColumnNumbers & arguments, size_t result)
{ {
if (!hasSpecialSupportForNulls() && block.hasNullColumns(arguments)) if (!hasSpecialSupportForNulls() && hasNullColumns(block, arguments))
{ {
ColumnWithTypeAndName & dest_col = block.getByPosition(result); ColumnWithTypeAndName & dest_col = block.getByPosition(result);
dest_col.column = std::make_shared<ColumnNull>(block.rowsInFirstColumn(), Null()); dest_col.column = std::make_shared<ColumnNull>(block.rowsInFirstColumn(), Null());
return; return;
} }
if (!hasSpecialSupportForNulls() && block.hasNullableColumns(arguments)) if (!hasSpecialSupportForNulls() && hasNullableColumns(block, arguments))
{ {
Block non_nullable_block = block.extractNonNullableBlock(arguments); Block non_nullable_block = block.extractNonNullableBlock(arguments);
executeImpl(non_nullable_block, arguments, result); executeImpl(non_nullable_block, arguments, result);
@ -192,14 +214,14 @@ void IFunction::execute(Block & block, const ColumnNumbers & arguments, size_t r
void IFunction::execute(Block & block, const ColumnNumbers & arguments, const ColumnNumbers & prerequisites, size_t result) void IFunction::execute(Block & block, const ColumnNumbers & arguments, const ColumnNumbers & prerequisites, size_t result)
{ {
if (!hasSpecialSupportForNulls() && block.hasNullColumns(arguments)) if (!hasSpecialSupportForNulls() && hasNullColumns(block, arguments))
{ {
ColumnWithTypeAndName & dest_col = block.getByPosition(result); ColumnWithTypeAndName & dest_col = block.getByPosition(result);
dest_col.column = std::make_shared<ColumnNull>(block.rowsInFirstColumn(), Null()); dest_col.column = std::make_shared<ColumnNull>(block.rowsInFirstColumn(), Null());
return; return;
} }
if (!hasSpecialSupportForNulls() && block.hasNullableColumns(arguments)) if (!hasSpecialSupportForNulls() && hasNullableColumns(block, arguments))
{ {
Block non_nullable_block = block.extractNonNullableBlock(arguments); Block non_nullable_block = block.extractNonNullableBlock(arguments);
executeImpl(non_nullable_block, arguments, prerequisites, result); executeImpl(non_nullable_block, arguments, prerequisites, result);