Miscellaneous [#METR-2944].

This commit is contained in:
Alexey Milovidov 2017-01-06 19:46:05 +03:00
parent 3dc636ab9f
commit 98772faf11
3 changed files with 9 additions and 11 deletions

View File

@ -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

View File

@ -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)

View File

@ -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);