mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
dbms: Moved addingDefault logic into the Block class [#METR-9001]
This commit is contained in:
parent
b3ba5e4cab
commit
f7a6316abd
@ -50,6 +50,8 @@ public:
|
||||
void erase(size_t position);
|
||||
/// удалить столбец с заданным именем
|
||||
void erase(const String & name);
|
||||
/// Добавляет в блок недостающие столбцы со значениями по-умолчанию
|
||||
void addDefaults(NamesAndTypesListPtr required_columns);
|
||||
|
||||
ColumnWithNameAndType & getByPosition(size_t position);
|
||||
const ColumnWithNameAndType & getByPosition(size_t position) const;
|
||||
|
@ -45,20 +45,7 @@ protected:
|
||||
Block res = children.back()->read();
|
||||
if (!res)
|
||||
return res;
|
||||
|
||||
for (NamesAndTypesList::const_iterator it = required_columns->begin(); it != required_columns->end(); ++it)
|
||||
{
|
||||
if (!res.has(it->first))
|
||||
{
|
||||
ColumnWithNameAndType col;
|
||||
col.name = it->first;
|
||||
col.type = it->second;
|
||||
col.column = dynamic_cast<IColumnConst &>(*it->second->createConstColumn(
|
||||
res.rows(), it->second->getDefault())).convertToFullColumn();
|
||||
res.insert(col);
|
||||
}
|
||||
}
|
||||
|
||||
res.addDefaults(required_columns);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -28,19 +28,7 @@ public:
|
||||
|
||||
void write(const Block & block) {
|
||||
Block res = block;
|
||||
for (NamesAndTypesList::const_iterator it = required_columns->begin(); it != required_columns->end(); ++it)
|
||||
{
|
||||
if (!res.has(it->first))
|
||||
{
|
||||
ColumnWithNameAndType col;
|
||||
col.name = it->first;
|
||||
col.type = it->second;
|
||||
col.column = dynamic_cast<IColumnConst &>(*it->second->createConstColumn(
|
||||
res.rows(), it->second->getDefault())).convertToFullColumn();
|
||||
res.insert(col);
|
||||
}
|
||||
}
|
||||
output->write(res);
|
||||
res.addDefaults(required_columns);
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -19,6 +19,21 @@ Block::Block(const Block & other)
|
||||
}
|
||||
|
||||
|
||||
void Block::addDefaults(NamesAndTypesListPtr required_columns) {
|
||||
for (NamesAndTypesList::const_iterator it = required_columns->begin(); it != required_columns->end(); ++it)
|
||||
{
|
||||
if (!this->has(it->first))
|
||||
{
|
||||
ColumnWithNameAndType col;
|
||||
col.name = it->first;
|
||||
col.type = it->second;
|
||||
col.column = dynamic_cast<IColumnConst &>(*it->second->createConstColumn(
|
||||
this->rows(), it->second->getDefault())).convertToFullColumn();
|
||||
this->insert(col);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Block & Block::operator= (const Block & other)
|
||||
{
|
||||
data = other.data;
|
||||
|
Loading…
Reference in New Issue
Block a user