mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-22 01:30:51 +00:00
dbms: ColumnArray: added support for method insertData [#METR-2944].
This commit is contained in:
parent
c55f193711
commit
67ab83de9e
@ -79,7 +79,7 @@ public:
|
||||
|
||||
StringRef getDataAt(size_t n) const
|
||||
{
|
||||
/** Работает для массивов чисел.
|
||||
/** Работает для массивов значений фиксированной длины.
|
||||
* Для массивов строк и массивов массивов полученный кусок памяти может не взаимно-однозначно соответствовать элементам.
|
||||
*/
|
||||
StringRef begin = data->getDataAt(offsetAt(n));
|
||||
@ -89,7 +89,20 @@ public:
|
||||
|
||||
void insertData(const char * pos, size_t length)
|
||||
{
|
||||
throw Exception("Method insertData is not supported for " + getName(), ErrorCodes::NOT_IMPLEMENTED);
|
||||
/** Аналогично - только для массивов значений фиксированной длины.
|
||||
*/
|
||||
IColumn * data_ = data.get();
|
||||
if (!data_->isFixed())
|
||||
throw Exception("Method insertData is not supported for " + getName(), ErrorCodes::NOT_IMPLEMENTED);
|
||||
|
||||
size_t field_size = data_->sizeOfField();
|
||||
|
||||
const char * end = pos + length;
|
||||
for (; pos + field_size <= end; pos += field_size)
|
||||
data_->insertData(pos, field_size);
|
||||
|
||||
if (pos != end)
|
||||
throw Exception("Incorrect length argument for method ColumnArray::insertData", ErrorCodes::BAD_ARGUMENTS);
|
||||
}
|
||||
|
||||
ColumnPtr cut(size_t start, size_t length) const
|
||||
|
Loading…
Reference in New Issue
Block a user