mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
dbms: fixed error [#CONV-7444].
This commit is contained in:
parent
1469ea51b3
commit
9d1142b028
@ -68,10 +68,14 @@ public:
|
||||
NamesAndTypesList getColumnsList() const;
|
||||
|
||||
/** Возвращает количество строк в блоке.
|
||||
* Заодно проверяет, что все столбцы кроме констант (которые содержат единственное значение),
|
||||
* содержат одинаковое число значений.
|
||||
* Заодно проверяет, что все столбцы содержат одинаковое число значений.
|
||||
*/
|
||||
size_t rows() const;
|
||||
|
||||
/** То же самое, но без проверки - берёт количество строк из первого столбца, если он есть или возвращает 0.
|
||||
*/
|
||||
size_t rowsInFirstColumn() const;
|
||||
|
||||
size_t columns() const;
|
||||
|
||||
/// Приблизительное количество байт в оперативке - для профайлинга.
|
||||
|
@ -188,7 +188,7 @@ private:
|
||||
Field value = col_array->getData().at(index);
|
||||
|
||||
block.getByPosition(result).column = block.getByPosition(result).type->createConstColumn(
|
||||
block.getByPosition(0).column->size(),
|
||||
block.rowsInFirstColumn(),
|
||||
value);
|
||||
|
||||
return true;
|
||||
@ -424,7 +424,7 @@ private:
|
||||
}
|
||||
|
||||
block.getByPosition(result).column = block.getByPosition(result).type->createConstColumn(
|
||||
block.getByPosition(0).column->size(),
|
||||
block.rowsInFirstColumn(),
|
||||
static_cast<typename NearestFieldType<typename IndexConv::ResultType>::Type>(current));
|
||||
|
||||
return true;
|
||||
|
@ -239,7 +239,7 @@ public:
|
||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result)
|
||||
{
|
||||
block.getByPosition(result).column = new ColumnConstUInt32(
|
||||
block.getByPosition(0).column->size(),
|
||||
block.rowsInFirstColumn(),
|
||||
time(0));
|
||||
}
|
||||
};
|
||||
@ -288,7 +288,7 @@ public:
|
||||
}
|
||||
else if (const ColumnConstUInt32 * const_times = dynamic_cast<const ColumnConstUInt32 *>(&*block.getByPosition(arguments[0]).column))
|
||||
{
|
||||
block.getByPosition(result).column = new ColumnConstUInt32(block.getByPosition(0).column->size(), const_times->getData() / TIME_SLOT_SIZE * TIME_SLOT_SIZE);
|
||||
block.getByPosition(result).column = new ColumnConstUInt32(block.rowsInFirstColumn(), const_times->getData() / TIME_SLOT_SIZE * TIME_SLOT_SIZE);
|
||||
}
|
||||
else
|
||||
throw Exception("Illegal column " + block.getByPosition(arguments[0]).column->getName()
|
||||
@ -436,7 +436,7 @@ public:
|
||||
{
|
||||
Array const_res;
|
||||
TimeSlotsImpl<UInt32>::constant_constant(const_starts->getData(), const_durations->getData(), const_res);
|
||||
block.getByPosition(result).column = new ColumnConstArray(block.getByPosition(0).column->size(), const_res, new DataTypeArray(new DataTypeDateTime));
|
||||
block.getByPosition(result).column = new ColumnConstArray(block.rowsInFirstColumn(), const_res, new DataTypeArray(new DataTypeDateTime));
|
||||
}
|
||||
else
|
||||
throw Exception("Illegal columns " + block.getByPosition(arguments[0]).column->getName()
|
||||
|
@ -341,7 +341,7 @@ public:
|
||||
/// Выполнить функцию над блоком.
|
||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result)
|
||||
{
|
||||
block.getByPosition(result).column = new ColumnConstString(block.getByPosition(0).column->size(), block.getByPosition(arguments[0]).type->getName());
|
||||
block.getByPosition(result).column = new ColumnConstString(block.rowsInFirstColumn(), block.getByPosition(arguments[0]).type->getName());
|
||||
}
|
||||
};
|
||||
|
||||
@ -369,7 +369,7 @@ public:
|
||||
/// Выполнить функцию над блоком.
|
||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result)
|
||||
{
|
||||
size_t size = block.getByPosition(0).column->size();
|
||||
size_t size = block.rowsInFirstColumn();
|
||||
block.getByPosition(result).column = ColumnConstUInt64(size, size).convertToFullColumn();
|
||||
}
|
||||
};
|
||||
@ -638,7 +638,7 @@ public:
|
||||
/// Выполнить функцию над блоком.
|
||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result)
|
||||
{
|
||||
block.getByPosition(result).column = new ColumnConstUInt8(block.getByPosition(0).column->size(), 0);
|
||||
block.getByPosition(result).column = new ColumnConstUInt8(block.rowsInFirstColumn(), 0);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -116,7 +116,7 @@ public:
|
||||
|
||||
typename ColumnVector<ToType>::Container_t & vec_to = col_to->getData();
|
||||
|
||||
size_t size = block.getByPosition(0).column->size();
|
||||
size_t size = block.rowsInFirstColumn();
|
||||
vec_to.resize(size);
|
||||
Impl::execute(vec_to);
|
||||
}
|
||||
|
@ -185,6 +185,15 @@ size_t Block::rows() const
|
||||
}
|
||||
|
||||
|
||||
size_t Block::rowsInFirstColumn() const
|
||||
{
|
||||
if (data.empty() || data.front().column.isNull())
|
||||
return 0;
|
||||
|
||||
return data.front().column->size();
|
||||
}
|
||||
|
||||
|
||||
size_t Block::columns() const
|
||||
{
|
||||
return data.size();
|
||||
|
Loading…
Reference in New Issue
Block a user