mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 08:02:02 +00:00
dbms: allowed to compile with standard library with large sizeof(std::string) [#METR-19609].
This commit is contained in:
parent
d95139d6f3
commit
0c592b05ba
@ -32,7 +32,7 @@ using Poco::SharedPtr;
|
||||
/** 32 хватает с запасом (достаточно 28), но выбрано круглое число,
|
||||
* чтобы арифметика при использовании массивов из Field была проще (не содержала умножения).
|
||||
*/
|
||||
#define DBMS_TOTAL_FIELD_SIZE 32
|
||||
#define DBMS_MIN_FIELD_SIZE 32
|
||||
|
||||
|
||||
/** Discriminated union из нескольких типов.
|
||||
@ -43,7 +43,7 @@ using Poco::SharedPtr;
|
||||
* Используется для представления единичного значения одного из нескольких типов в оперативке.
|
||||
* Внимание! Предпочтительно вместо единичных значений хранить кусочки столбцов. См. Column.h
|
||||
*/
|
||||
class __attribute__((aligned(DBMS_TOTAL_FIELD_SIZE))) Field
|
||||
class Field
|
||||
{
|
||||
public:
|
||||
struct Types
|
||||
@ -268,16 +268,9 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
/// Хватает с запасом
|
||||
static const size_t storage_size = DBMS_TOTAL_FIELD_SIZE - sizeof(Types::Which);
|
||||
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(Null));
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(UInt64));
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(Int64));
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(Float64));
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(String));
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(Array));
|
||||
BOOST_STATIC_ASSERT(storage_size >= sizeof(Tuple));
|
||||
static const size_t storage_size = std::max({
|
||||
DBMS_MIN_FIELD_SIZE - sizeof(Types::Which),
|
||||
sizeof(Null), sizeof(UInt64), sizeof(Int64), sizeof(Float64), sizeof(String), sizeof(Array), sizeof(Tuple)});
|
||||
|
||||
char storage[storage_size] __attribute__((aligned(8)));
|
||||
Types::Which which;
|
||||
@ -352,7 +345,7 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
#undef DBMS_TOTAL_FIELD_SIZE
|
||||
#undef DBMS_MIN_FIELD_SIZE
|
||||
|
||||
|
||||
template <> struct Field::TypeToEnum<Null> { static const Types::Which value = Types::Null; };
|
||||
|
Loading…
Reference in New Issue
Block a user