mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-10 09:32:06 +00:00
Miscellaneous [#METR-2944].
This commit is contained in:
parent
3dc636ab9f
commit
98772faf11
@ -21,13 +21,12 @@ namespace ErrorCodes
|
||||
}
|
||||
|
||||
class Field;
|
||||
using Array = std::vector<Field>; /// Значение типа "массив"
|
||||
using Array = std::vector<Field>;
|
||||
using TupleBackend = std::vector<Field>;
|
||||
STRONG_TYPEDEF(TupleBackend, Tuple); /// Значение типа "кортеж"
|
||||
STRONG_TYPEDEF(TupleBackend, Tuple); /// Array and Tuple are different types with equal representation inside Field.
|
||||
|
||||
|
||||
/** 32 хватает с запасом (достаточно 28), но выбрано круглое число,
|
||||
* чтобы арифметика при использовании массивов из Field была проще (не содержала умножения).
|
||||
/** 32 is enough. Round number is used for alignment and for better arithmetic inside std::vector.
|
||||
*/
|
||||
#define DBMS_MIN_FIELD_SIZE 32
|
||||
|
||||
|
@ -9,11 +9,12 @@
|
||||
#include <DB/Core/FieldVisitors.h>
|
||||
|
||||
|
||||
/// This is for Yandex.Metrica code.
|
||||
namespace mysqlxx
|
||||
{
|
||||
std::ostream & operator<< (mysqlxx::EscapeManipResult res, const DB::Array & value)
|
||||
{
|
||||
return res.ostr << apply_visitor(DB::FieldVisitorToString(), value);
|
||||
return res.ostr << DB::apply_visitor(DB::FieldVisitorToString(), DB::Field(value));
|
||||
}
|
||||
|
||||
std::ostream & operator<< (mysqlxx::QuoteManipResult res, const DB::Array & value)
|
||||
@ -30,14 +31,11 @@ namespace mysqlxx
|
||||
{
|
||||
throw Poco::Exception("Cannot unquote Array with mysqlxx::unquote.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace mysqlxx
|
||||
{
|
||||
std::ostream & operator<< (mysqlxx::EscapeManipResult res, const DB::Tuple & value)
|
||||
{
|
||||
return res.ostr << apply_visitor(DB::FieldVisitorToString(), value);
|
||||
return res.ostr << DB::apply_visitor(DB::FieldVisitorToString(), DB::Field(value));
|
||||
}
|
||||
|
||||
std::ostream & operator<< (mysqlxx::QuoteManipResult res, const DB::Tuple & value)
|
||||
|
@ -10,9 +10,10 @@ namespace DB
|
||||
|
||||
String ASTLiteral::getColumnName() const
|
||||
{
|
||||
/// Отдельный случай для очень больших массивов. Вместо указания всех элементов, будем использовать хэш от содержимого.
|
||||
/// Special case for very large arrays. Instead of listing all elements, will use hash of them.
|
||||
/// (Otherwise column name will be too long, that will lead to significant slowdown of expression analysis.)
|
||||
if (value.getType() == Field::Types::Array
|
||||
&& value.get<const Array &>().size() > 100) /// 100 - наугад.
|
||||
&& value.get<const Array &>().size() > 100) /// 100 - just arbitary value.
|
||||
{
|
||||
SipHash hash;
|
||||
apply_visitor(FieldVisitorHash(hash), value);
|
||||
|
Loading…
Reference in New Issue
Block a user