dbms: development [#CONV-2944].

This commit is contained in:
Alexey Milovidov 2012-09-17 04:31:25 +00:00
parent 20d1415938
commit 5501a05fc6
4 changed files with 11 additions and 3 deletions

View File

@ -100,7 +100,7 @@ public:
/** Размножить все значения столько раз, сколько прописано в offsets.
* (i-е значение размножается в offsets[i] - offsets[i - 1] значений.)
*/
typedef UInt32 Offset_t;
typedef UInt64 Offset_t;
typedef std::vector<Offset_t> Offsets_t;
virtual void replicate(const Offsets_t & offsets) = 0;

View File

@ -32,7 +32,10 @@ template <> ColumnPtr ColumnConst<String>::convertToFullColumn() const
template <> ColumnPtr ColumnConst<Array>::convertToFullColumn() const
{
size_t array_size = data.size();
ColumnPtr nested_column = boost::apply_visitor(FieldToDataType(), data.at(0))->createColumn();
ColumnPtr nested_column = data.empty()
? new ColumnUInt8 /// Для пустого массива непонятно, какого типа будет материализованный столбец. Пусть будет UInt8.
: boost::apply_visitor(FieldToDataType(), data.at(0))->createColumn();
ColumnArray * res = new ColumnArray(nested_column);
ColumnArray::Offsets_t & offsets = res->getOffsets();

View File

@ -22,7 +22,9 @@ static void writeData(const IDataType & type, const IColumn & column, WriteBuffe
if (const DataTypeArray * type_arr = dynamic_cast<const DataTypeArray *>(&type))
{
type_arr->getOffsetsType()->serializeBinary(*dynamic_cast<const ColumnArray &>(column).getOffsetsColumn(), ostr);
writeData(*type_arr->getNestedType(), dynamic_cast<const ColumnArray &>(column).getData(), ostr);
if (!dynamic_cast<const ColumnArray &>(column).getData().empty())
writeData(*type_arr->getNestedType(), dynamic_cast<const ColumnArray &>(column).getData(), ostr);
}
else
type.serializeBinary(column, ostr);

View File

@ -11,6 +11,7 @@
#include <DB/Functions/FunctionsRandom.h>
#include <DB/Functions/FunctionsURL.h>
#include <DB/Functions/FunctionsArray.h>
#include <DB/Functions/FunctionsStringArray.h>
#include <DB/Functions/FunctionsMiscellaneous.h>
#include <DB/Functions/FunctionsLibrary.h>
@ -130,6 +131,8 @@ namespace FunctionsLibrary
("notIn", new FunctionIn(true))
("array", new FunctionArray)
("alphaTokens", new FunctionAlphaTokens)
;
return res;