mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 07:31:57 +00:00
translate comments
This commit is contained in:
parent
dcb5371844
commit
b51c6e7592
@ -15,8 +15,8 @@ namespace ErrorCodes
|
||||
}
|
||||
|
||||
|
||||
/** Тип - состояние агрегатной функции.
|
||||
* Параметры типа - это агрегатная функция, типы её аргументов и её параметры (для параметрических агрегатных функций).
|
||||
/** Type - the state of the aggregate function.
|
||||
* Type parameters is an aggregate function, the types of its arguments, and its parameters (for parametric aggregate functions).
|
||||
*/
|
||||
class DataTypeAggregateFunction final : public IDataType
|
||||
{
|
||||
@ -41,7 +41,7 @@ public:
|
||||
|
||||
DataTypePtr clone() const override { return std::make_shared<DataTypeAggregateFunction>(function, argument_types, parameters); }
|
||||
|
||||
/// NOTE Эти две функции сериализации одиночных значений несовместимы с функциями ниже.
|
||||
/// NOTE These two functions for serializing single values are incompatible with the functions below.
|
||||
void serializeBinary(const Field & field, WriteBuffer & ostr) const override;
|
||||
void deserializeBinary(Field & field, ReadBuffer & istr) const override;
|
||||
|
||||
|
@ -11,11 +11,11 @@ namespace DB
|
||||
class DataTypeArray final : public IDataType
|
||||
{
|
||||
private:
|
||||
/// Расширенный тип элементов массивов.
|
||||
/// Extended type of array elements.
|
||||
DataTypeTraits::EnrichedDataTypePtr enriched_nested;
|
||||
/// Тип элементов массивов.
|
||||
/// The type of array elements.
|
||||
DataTypePtr nested;
|
||||
/// Тип смещений.
|
||||
/// Type of offsets.
|
||||
DataTypePtr offsets;
|
||||
|
||||
public:
|
||||
@ -54,25 +54,25 @@ public:
|
||||
void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override;
|
||||
void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override;
|
||||
|
||||
/** Потоковая сериализация массивов устроена по-особенному:
|
||||
* - записываются/читаются элементы, уложенные подряд, без размеров массивов;
|
||||
* - размеры записываются/читаются в отдельный столбец,
|
||||
* и о записи/чтении размеров должна позаботиться вызывающая сторона.
|
||||
* Это нужно, так как при реализации вложенных структур, несколько массивов могут иметь общие размеры.
|
||||
/** Streaming serialization of arrays is arranged in a special way:
|
||||
* - elements placed in a row are written/read without array sizes;
|
||||
* - the sizes are written/read in a separate column,
|
||||
* and the caller must take care of writing/reading the sizes.
|
||||
* This is necessary, because when implementing nested structures, several arrays can have common sizes.
|
||||
*/
|
||||
|
||||
/** Записать только значения, без размеров. Вызывающая сторона также должна куда-нибудь записать смещения. */
|
||||
/** Write only values, without dimensions. The caller also needs to record the offsets somewhere. */
|
||||
void serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const override;
|
||||
|
||||
/** Прочитать только значения, без размеров.
|
||||
* При этом, в column уже заранее должны быть считаны все размеры.
|
||||
/** Read only values, without dimensions.
|
||||
* In this case, all the sizes must already be read in the column beforehand.
|
||||
*/
|
||||
void deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double avg_value_size_hint) const override;
|
||||
|
||||
/** Записать размеры. */
|
||||
/** Write the dimensions. */
|
||||
void serializeOffsets(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const;
|
||||
|
||||
/** Прочитать размеры. Вызывайте этот метод перед чтением значений. */
|
||||
/** Read the dimensions. Call this method before reading the values. */
|
||||
void deserializeOffsets(IColumn & column, ReadBuffer & istr, size_t limit) const;
|
||||
|
||||
ColumnPtr createColumn() const override;
|
||||
|
@ -7,13 +7,13 @@
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Хранит набор пар (имя, тип) для вложенной структуры данных.
|
||||
* Используется только при создании таблицы. Во всех остальных случаях не используется, так как раскрывается в набор отдельных столбцов с типами.
|
||||
/** Stores a set of pairs (name, type) for the nested data structure.
|
||||
* Used only when creating a table. In all other cases, it is not used, since it is expanded into a set of individual columns with types.
|
||||
*/
|
||||
class DataTypeNested final : public IDataTypeDummy
|
||||
{
|
||||
private:
|
||||
/// Имена и типы вложенных массивов.
|
||||
/// Names and types of nested arrays.
|
||||
NamesAndTypesListPtr nested;
|
||||
|
||||
public:
|
||||
@ -29,12 +29,12 @@ public:
|
||||
const NamesAndTypesListPtr & getNestedTypesList() const { return nested; }
|
||||
|
||||
static std::string concatenateNestedName(const std::string & nested_table_name, const std::string & nested_field_name);
|
||||
/// Возвращает префикс имени до первой точки '.'. Или имя без изменений, если точки нет.
|
||||
/// Returns the prefix of the name to the first '.'. Or the name is unchanged if there is no dot.
|
||||
static std::string extractNestedTableName(const std::string & nested_name);
|
||||
/// Возвращает суффикс имени после первой точки справа '.'. Или имя без изменений, если точки нет.
|
||||
/// Returns the name suffix after the first dot on the right '.'. Or the name is unchanged if there is no dot.
|
||||
static std::string extractNestedColumnName(const std::string & nested_name);
|
||||
|
||||
/// Создает новый список в котором колонки типа Nested заменены на несколько вида имя_колонки.имя_вложенной_ячейки
|
||||
/// Creates a new list in which Nested-type columns are replaced by several columns form of `column_name.cell_name`
|
||||
static NamesAndTypesListPtr expandNestedColumns(const NamesAndTypesList & names_and_types);
|
||||
};
|
||||
|
||||
|
@ -6,8 +6,8 @@
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Реализует часть интерфейса IDataType, общую для всяких чисел
|
||||
* - ввод и вывод в текстовом виде.
|
||||
/** Implements part of the IDataType interface, common to all numbers
|
||||
* - input and output in text form.
|
||||
*/
|
||||
template <typename T>
|
||||
class DataTypeNumberBase : public IDataType
|
||||
|
@ -6,8 +6,8 @@
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Тип данных, соответствующий множеству значений в секции IN.
|
||||
* Используется только как промежуточный вариант при вычислении выражений.
|
||||
/** The data type corresponding to the set of values in the IN section.
|
||||
* Used only as an intermediate option when evaluating expressions.
|
||||
*/
|
||||
class DataTypeSet final : public IDataTypeDummy
|
||||
{
|
||||
|
@ -6,10 +6,10 @@
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Тип данных - кортеж.
|
||||
* Используется как промежуточный результат при вычислении выражений.
|
||||
* Также может быть использовать в качестве столбца - результата выполнения запроса.
|
||||
* Не может быть сохранён в таблицы.
|
||||
/** Tuple data type.
|
||||
* Used as an intermediate result when evaluating expressions.
|
||||
* Also can be used as a column - the result of the query execution.
|
||||
* Can not be saved to tables.
|
||||
*/
|
||||
class DataTypeTuple final : public IDataType
|
||||
{
|
||||
@ -35,15 +35,15 @@ public:
|
||||
void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override;
|
||||
void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override;
|
||||
|
||||
/// Кортежи в формате CSV будем сериализовать, как отдельные столбцы (то есть, теряя их вложенность в кортеж).
|
||||
/// Tuples in CSV format will be serialized as separate columns (that is, losing their nesting in the tuple).
|
||||
void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override;
|
||||
void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override;
|
||||
|
||||
void serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const override;
|
||||
|
||||
/** limit обязательно должен быть в точности равен количеству сериализованных значений.
|
||||
* Именно из-за этого (невозможности читать меньший кусок записанных данных), Tuple не могут быть использованы для хранения данных в таблицах.
|
||||
* (Хотя могут быть использованы для передачи данных по сети в Native формате.)
|
||||
/** `limit` must be exactly equal to the number of serialized values.
|
||||
* It is because of this (the inability to read a smaller piece of recorded data) that Tuple can not be used to store data in tables.
|
||||
* (Although they can be used to transfer data over a network in Native format.)
|
||||
*/
|
||||
void deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double avg_value_size_hint) const override;
|
||||
|
||||
|
@ -10,8 +10,8 @@ class IDataType;
|
||||
using DataTypePtr = std::shared_ptr<IDataType>;
|
||||
|
||||
|
||||
/** Для заданного значения Field возвращает минимальный тип данных, позволяющий хранить значение этого типа.
|
||||
* В случае, если Field - массив, конвертирует все элементы к общему типу.
|
||||
/** For a given value, Field returns the minimum data type that allows this value to be stored.
|
||||
* In case Field is an array, converts all elements to a common type.
|
||||
*/
|
||||
class FieldToDataType : public StaticVisitor<DataTypePtr>
|
||||
{
|
||||
|
@ -6,10 +6,10 @@
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Базовые класс для типов данных, которые не поддерживают сериализацию и десериализацию,
|
||||
* а возникают лишь в качестве промежуточного результата вычислений.
|
||||
/** The base class for data types that do not support serialization and deserialization,
|
||||
* but arise only as an intermediate result of the calculations.
|
||||
*
|
||||
* То есть, этот класс используется всего лишь чтобы отличить соответствующий тип данных от других.
|
||||
* That is, this class is used just to distinguish the corresponding data type from the others.
|
||||
*/
|
||||
class IDataTypeDummy : public IDataType
|
||||
{
|
||||
|
@ -10,45 +10,45 @@ namespace Poco { class Logger; }
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Позволяет создавать "облачные таблицы".
|
||||
* Список таких таблиц хранится в ZooKeeper.
|
||||
* Все серверы, ссылающиеся на один путь в ZooKeeper, видят один и тот же список таблиц.
|
||||
* CREATE, DROP, RENAME атомарны.
|
||||
/** Allows you to create "cloud tables".
|
||||
* A list of such tables is stored in ZooKeeper.
|
||||
* All servers that refer to the same path in ZooKeeper see the same list of tables.
|
||||
* CREATE, DROP, RENAME are atomic.
|
||||
*
|
||||
* Для БД задаётся уровень репликации N.
|
||||
* При записи в "облачную" таблицу, некоторым образом выбирается N живых серверов в разных датацентрах,
|
||||
* на каждом из них создаётся локальная таблица, и в них производится запись.
|
||||
* The replication level N is set for the database.
|
||||
* When writing to a cloud table, N live servers are selected in some way in different datacenters,
|
||||
* on each of them a local table is created, and data is written to them.
|
||||
*
|
||||
* Движок имеет параметры: Cloud(zookeeper_path, replication_factor, datacenter_name)
|
||||
* Пример: Cloud('/clickhouse/clouds/production/', 3, 'FIN')
|
||||
* The engine has the parameters: Cloud(zookeeper_path, replication_factor, datacenter_name)
|
||||
* Example: Cloud('/clickhouse/clouds/production/', 3, 'FIN')
|
||||
*
|
||||
* Структура в ZooKeeper:
|
||||
* Structure in ZooKeeper:
|
||||
*
|
||||
* cloud_path - путь к "облаку"; может существовать несколько разных независимых облаков
|
||||
/table_definitions - множество уникальных определений таблиц, чтобы не писать их много раз для большого количества таблиц
|
||||
/hash128 -> sql - отображение: хэш от определения таблицы (идентификатор) -> само определение таблицы в виде CREATE запроса
|
||||
/tables - список таблиц
|
||||
/database_name - имя базы данных
|
||||
* cloud_path - the path to the "cloud"; There may be several different independent clouds
|
||||
/table_definitions - set of unique table definitions so you do not write them many times for a large number of tables
|
||||
/hash128 -> sql - mapping: hash from table definition (identifier) -> table definition itself as CREATE query
|
||||
/tables - list of tables
|
||||
/database_name - name of the database
|
||||
/name_hash_mod -> compressed_table_list
|
||||
- список таблиц сделан двухуровневым, чтобы уменьшить количество узлов в ZooKeeper при наличии большого количества таблиц
|
||||
- узлы создаются для каждого остатка от деления хэша от имени таблицы, например, на 4096
|
||||
- и в каждом узле хранится список таблиц (имя таблицы, имя локальной таблицы, хэш от структуры, список хостов) в сжатом виде
|
||||
/local_tables - список локальных таблиц, чтобы по имени локальной таблицы можно было определить её структуру
|
||||
- the list of tables is made two-level to reduce the number of nodes in ZooKeeper if there are a large number of tables
|
||||
- nodes are created for each remainder of the hash partition from the table name, for example, to 4096
|
||||
- and each node stores a list of tables (table name, local table name, hash from structure, hosts list) in a compressed form
|
||||
/local_tables - a list of local tables so that by the name of the local table you can determine its structure
|
||||
/database_name
|
||||
/name_hash_mod -> compressed_table_list
|
||||
- список пар (хэш от имени таблицы, хэш от структуры) в сжатом виде
|
||||
/locality_keys - сериализованный список ключей локальности в порядке их появления
|
||||
- ключ локальности - произвольная строка
|
||||
- движок БД определяет серверы для расположения данных таким образом,
|
||||
чтобы, при одинаковом множестве живых серверов,
|
||||
одному ключу локальности соответствовала одна группа из N серверов для расположения данных.
|
||||
/nodes - список серверов, на которых зарегистрированы облачные БД с таким путём в ZK
|
||||
/hostname - имя хоста
|
||||
TODO /alive - эфемерная нода для предварительной проверки живости
|
||||
/datacenter - имя датацентра
|
||||
- list of pairs (hash from the table name, hash from the structure) in a compressed form
|
||||
/locality_keys - a serialized list of locality keys in the order in which they appear
|
||||
- locality key - an arbitrary string
|
||||
- the database engine defines the servers for the data location in such a way,
|
||||
that, with the same set of live servers,
|
||||
one locality key corresponds to one group of N servers for the data location.
|
||||
/nodes - the list of servers on which cloud databases are registered with the same path in ZK
|
||||
/hostname - hostname
|
||||
TODO /alive - an ephemeral node for pre-testing liveliness
|
||||
/datacenter - the name of the data center
|
||||
TODO /disk_space
|
||||
|
||||
* К одному облаку может относиться несколько БД, названных по-разному. Например, БД hits и visits могут относиться к одному облаку.
|
||||
* For one cloud there may be more than one database named differently. For example, DB `hits` and `visits` can belong to the same cloud.
|
||||
*/
|
||||
class DatabaseCloud : public IDatabase
|
||||
{
|
||||
@ -65,11 +65,11 @@ private:
|
||||
|
||||
Context & context;
|
||||
|
||||
/** Локальные таблицы - это таблицы, находящиеся непосредственно на локальном сервере.
|
||||
* Они хранят данные облачных таблиц: облачная таблица представлена несколькими локальными таблицами на разных серверах.
|
||||
* Эти таблицы не видны пользователю при перечислении таблиц, хотя доступны при обращении по имени.
|
||||
* Имя локальных таблиц имеет специальную форму, например, начинаться на _local, чтобы они не путались с облачными таблицами.
|
||||
* Локальные таблицы загружаются лениво, при первом обращении.
|
||||
/** Local tables are tables that are located directly on the local server.
|
||||
* They store the data of the cloud tables: the cloud table is represented by several local tables on different servers.
|
||||
* These tables are not visible to the user when listing tables, although they are available when referring by name.
|
||||
* The name of the local tables has a special form, for example, start with _local so that they do not get confused with the cloud tables.
|
||||
* Local tables are loaded lazily, on first access.
|
||||
*/
|
||||
Tables local_tables_cache;
|
||||
mutable std::mutex local_tables_mutex;
|
||||
@ -131,19 +131,19 @@ public:
|
||||
private:
|
||||
void createZookeeperNodes();
|
||||
|
||||
/// Получить имя узла, в котором будет храниться часть списка таблиц. (Список таблиц является двухуровневым.)
|
||||
/// Get the name of the node in which the part of the list of tables will be stored. (The list of tables is two-level.)
|
||||
String getNameOfNodeWithTables(const String & table_name) const;
|
||||
|
||||
/// Хэшировать имя таблицы вместе с именем БД.
|
||||
/// Hash the table name along with the database name.
|
||||
Hash getTableHash(const String & table_name) const;
|
||||
|
||||
/// Определения таблиц хранятся косвенным образом и адресуются своим хэшом. Вычислить хэш.
|
||||
/// Table definitions are stored indirectly and addressed by its hash. Calculate the hash.
|
||||
Hash getHashForTableDefinition(const String & definition) const;
|
||||
|
||||
/// Пойти в ZooKeeper и по хэшу получить определение таблицы.
|
||||
/// Go to ZooKeeper and get a table definition by hash.
|
||||
String getTableDefinitionFromHash(Hash hash) const;
|
||||
|
||||
/// Определить серверы, на которых будут храниться данные таблицы.
|
||||
/// Define the servers on which the table data will be stored.
|
||||
std::vector<String> selectHostsForTable(const String & locality_key) const;
|
||||
};
|
||||
|
||||
|
@ -5,22 +5,22 @@
|
||||
#include <Storages/IStorage.h>
|
||||
#include <Databases/IDatabase.h>
|
||||
|
||||
/// Общая функциональность для нескольких разных движков баз данных.
|
||||
/// General functionality for several different database engines.
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
|
||||
/** Получить строку с определением таблицы на основе запроса CREATE.
|
||||
* Она представляет собой запрос ATTACH, который можно выполнить для создания таблицы, находясь в нужной БД.
|
||||
* См. реализацию.
|
||||
/** Get the row with the table definition based on the CREATE query.
|
||||
* It is an ATTACH query that you can execute to create a table from the correspondent database.
|
||||
* See the implementation.
|
||||
*/
|
||||
String getTableDefinitionFromCreateQuery(const ASTPtr & query);
|
||||
|
||||
|
||||
/** Создать таблицу по её определению, без использования InterpreterCreateQuery.
|
||||
* (InterpreterCreateQuery обладает более сложной функциональностью, и его нельзя использовать, если БД ещё не создана)
|
||||
* Возвращает имя таблицы и саму таблицу.
|
||||
/** Create a table by its definition, without using InterpreterCreateQuery.
|
||||
* (InterpreterCreateQuery has more complex functionality, and it can not be used if the database has not been created yet)
|
||||
* Returns the table name and the table itself.
|
||||
*/
|
||||
std::pair<String, StoragePtr> createTableFromDefinition(
|
||||
const String & definition,
|
||||
|
@ -57,37 +57,37 @@ public:
|
||||
/// Get name of database engine.
|
||||
virtual String getEngineName() const = 0;
|
||||
|
||||
/// Загрузить множество существующих таблиц. Если задан thread_pool - использовать его.
|
||||
/// Можно вызывать только один раз, сразу после создания объекта.
|
||||
/// Load a set of existing tables. If thread_pool is specified, use it.
|
||||
/// You can call only once, right after the object is created.
|
||||
virtual void loadTables(Context & context, ThreadPool * thread_pool, bool has_force_restore_data_flag) = 0;
|
||||
|
||||
/// Проверить существование таблицы.
|
||||
/// Check the existence of the table.
|
||||
virtual bool isTableExist(const String & name) const = 0;
|
||||
|
||||
/// Получить таблицу для работы. Вернуть nullptr, если таблицы нет.
|
||||
/// Get the table for work. Return nullptr if there is no table.
|
||||
virtual StoragePtr tryGetTable(const String & name) = 0;
|
||||
|
||||
/// Получить итератор, позволяющий перебрать все таблицы.
|
||||
/// Допустимо наличие "скрытых" таблиц, которые не видны при переборе, но видны, если получать их по имени, используя функции выше.
|
||||
/// Get an iterator that allows you to pass through all the tables.
|
||||
/// It is possible to have "hidden" tables that are not visible when passing through, but are visible if you get them by name using the functions above.
|
||||
virtual DatabaseIteratorPtr getIterator() = 0;
|
||||
|
||||
/// Является ли БД пустой.
|
||||
/// Is the database empty.
|
||||
virtual bool empty() const = 0;
|
||||
|
||||
/// Добавить таблицу в базу данных. Прописать её наличие в метаданных.
|
||||
/// Add the table to the database. Record its presence in the metadata.
|
||||
virtual void createTable(
|
||||
const String & name, const StoragePtr & table, const ASTPtr & query, const String & engine, const Settings & settings) = 0;
|
||||
|
||||
/// Удалить таблицу из базы данных и вернуть её. Удалить метаданные.
|
||||
/// Delete the table from the database and return it. Delete the metadata.
|
||||
virtual void removeTable(const String & name) = 0;
|
||||
|
||||
/// Добавить таблицу в базу данных, но не прописывать её в метаданных. БД может не поддерживать этот метод.
|
||||
/// Add a table to the database, but do not add it to the metadata. The database may not support this method.
|
||||
virtual void attachTable(const String & name, const StoragePtr & table) = 0;
|
||||
|
||||
/// Забыть про таблицу, не удаляя её, и вернуть её. БД может не поддерживать этот метод.
|
||||
/// Forget about the table without deleting it, and return it. The database may not support this method.
|
||||
virtual StoragePtr detachTable(const String & name) = 0;
|
||||
|
||||
/// Переименовать таблицу и, возможно, переместить таблицу в другую БД.
|
||||
/// Rename the table and possibly move the table to another database.
|
||||
virtual void renameTable(
|
||||
const Context & context, const String & name, IDatabase & to_database, const String & to_name, const Settings & settings) = 0;
|
||||
|
||||
@ -96,8 +96,8 @@ public:
|
||||
|
||||
using ASTModifier = std::function<void(ASTPtr &)>;
|
||||
|
||||
/// Изменить структуру таблицы в метаданных.
|
||||
/// Нужно вызывать под TableStructureLock соответствующей таблицы. Если engine_modifier пустой, то engine не изменяется.
|
||||
/// Change the table structure in metadata.
|
||||
/// You must call under the TableStructureLock of the corresponding table . If engine_modifier is empty, then engine does not change.
|
||||
virtual void alterTable(
|
||||
const Context & context,
|
||||
const String & name,
|
||||
@ -107,13 +107,13 @@ public:
|
||||
const ColumnDefaults & column_defaults,
|
||||
const ASTModifier & engine_modifier) = 0;
|
||||
|
||||
/// Получить запрос CREATE TABLE для таблицы. Может выдавать информацию и для detached таблиц, для которых есть метаданные.
|
||||
/// Get the CREATE TABLE query for the table. It can also provide information for detached tables for which there is metadata.
|
||||
virtual ASTPtr getCreateQuery(const String & name) const = 0;
|
||||
|
||||
/// Попросить все таблицы завершить фоновые потоки, которые они используют, и удалить все объекты таблиц.
|
||||
/// Ask all tables to complete the background threads they are using and delete all table objects.
|
||||
virtual void shutdown() = 0;
|
||||
|
||||
/// Удалить метаданные, удаление которых отличается от рекурсивного удаления директории, если такие есть.
|
||||
/// Delete metadata, the deletion of which differs from the recursive deletion of the directory, if any.
|
||||
virtual void drop() = 0;
|
||||
|
||||
virtual ~IDatabase() {}
|
||||
|
@ -83,8 +83,8 @@ public:
|
||||
return dict_struct.attributes[&getAttribute(attribute_name) - attributes.data()].injective;
|
||||
}
|
||||
|
||||
/// Во всех функциях ниже, key_columns должны быть полноценными (не константными) столбцами.
|
||||
/// См. требование в IDataType.h для функций текстовой сериализации.
|
||||
/// In all functions below, key_columns must be full (non-constant) columns.
|
||||
/// See the requirement in IDataType.h for text-serialization functions.
|
||||
#define DECLARE(TYPE)\
|
||||
void get##TYPE(\
|
||||
const std::string & attribute_name, const ConstColumnPlainPtrs & key_columns, const DataTypes & key_types,\
|
||||
|
@ -32,7 +32,7 @@ enum class AttributeUnderlyingType
|
||||
};
|
||||
|
||||
|
||||
/** Для неявных преобразований в функциях dictGet.
|
||||
/** For implicit conversions in dictGet functions.
|
||||
*/
|
||||
bool isAttributeTypeConvertibleTo(AttributeUnderlyingType from, AttributeUnderlyingType to);
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
#include <unordered_map>
|
||||
|
||||
|
||||
/** Содержит несколько иерархий регионов, загружаемых из нескольких разных файлов.
|
||||
* Используется, чтобы поддержать несколько разных точек зрения о принадлежности регионов странам.
|
||||
* В первую очередь, для Крыма (Российская и Украинская точки зрения).
|
||||
/** Contains several hierarchies of regions, loaded from several different files.
|
||||
* Used to support several different perspectives on the ownership of regions by countries.
|
||||
* First of all, for the Crimea (Russian and Ukrainian points of view).
|
||||
*/
|
||||
class RegionsHierarchies
|
||||
{
|
||||
@ -17,12 +17,12 @@ private:
|
||||
|
||||
public:
|
||||
/** path_to_regions_hierarchy_file in configuration file
|
||||
* должен указывать на файл с иерархией регионов "по-умолчанию". Она будет доступна по пустому ключу.
|
||||
* Кроме того, рядом ищутся файлы, к имени которых (до расширения, если есть) добавлен произвольный _suffix.
|
||||
* Такие файлы загружаются, и иерархия регионов кладётся по ключу suffix.
|
||||
* must point to the file with the hierarchy of regions "by default". It will be accessible by an empty key.
|
||||
* In addition, a number of files are searched for, the name of which (before the extension, if any) is added arbitrary _suffix.
|
||||
* Such files are loaded, and the hierarchy of regions is put on the `suffix` key.
|
||||
*
|
||||
* Например, если указано /opt/geo/regions_hierarchy.txt,
|
||||
* то будет также загружен файл /opt/geo/regions_hierarchy_ua.txt, если такой есть - он будет доступен по ключу ua.
|
||||
* For example, if /opt/geo/regions_hierarchy.txt is specified,
|
||||
* then the /opt/geo/regions_hierarchy_ua.txt file will also be loaded, if any, it will be accessible by the `ua` key.
|
||||
*/
|
||||
RegionsHierarchies();
|
||||
explicit RegionsHierarchies(const std::string & path_to_regions_hierarchy_file);
|
||||
@ -31,7 +31,7 @@ public:
|
||||
static bool isConfigured();
|
||||
|
||||
|
||||
/** Перезагружает, при необходимости, все иерархии регионов.
|
||||
/** Reloads, if necessary, all hierarchies of regions.
|
||||
*/
|
||||
void reload()
|
||||
{
|
||||
|
@ -13,9 +13,9 @@
|
||||
#define REGION_TYPE_CONTINENT 1
|
||||
|
||||
|
||||
/** Класс, позволяющий узнавать, принадлежит ли регион с одним RegionID региону с другим RegionID.
|
||||
* Информацию об иерархии регионов загружает из текстового файла.
|
||||
* Умеет, по запросу, обновлять данные.
|
||||
/** A class that lets you know if a region belongs to one RegionID region with another RegionID.
|
||||
* Information about the hierarchy of regions is downloaded from a text file.
|
||||
* Can on request update the data.
|
||||
*/
|
||||
class RegionsHierarchy : private boost::noncopyable
|
||||
{
|
||||
@ -27,34 +27,34 @@ private:
|
||||
using RegionDepth = UInt8;
|
||||
using RegionPopulation = UInt32;
|
||||
|
||||
/// отношение parent; 0, если родителей нет - обычная lookup таблица.
|
||||
/// Relationship parent; 0, if there are no parents, the usual lookup table.
|
||||
using RegionParents = std::vector<RegionID>;
|
||||
/// тип региона
|
||||
/// type of region
|
||||
using RegionTypes = std::vector<RegionType>;
|
||||
/// глубина в дереве, начиная от страны (страна: 1, корень: 0)
|
||||
/// depth in the tree, starting from the country (country: 1, root: 0)
|
||||
using RegionDepths = std::vector<RegionDepth>;
|
||||
/// население региона. Если больше 2^32 - 1, то приравнивается к этому максимуму.
|
||||
/// population of the region. If more than 2 ^ 32 - 1, then it is equated to this maximum.
|
||||
using RegionPopulations = std::vector<RegionPopulation>;
|
||||
|
||||
/// регион -> родительский регион
|
||||
/// region -> parent region
|
||||
RegionParents parents;
|
||||
/// регион -> город, включающий его или 0, если такого нет
|
||||
/// region -> city, including it or 0, if there is none
|
||||
RegionParents city;
|
||||
/// регион -> страна, включающая его или 0, если такого нет
|
||||
/// region -> country including it or 0, if there is none
|
||||
RegionParents country;
|
||||
/// регион -> область, включающая его или 0, если такой нет
|
||||
/// region -> area that includes it or 0, if not
|
||||
RegionParents area;
|
||||
/// регион -> округ, включающий его или 0, если такого нет
|
||||
/// region -> district, including it or 0, if there is none
|
||||
RegionParents district;
|
||||
/// регион -> континет (первый при подъёме по иерархии регионов), включающий его или 0, если такого нет
|
||||
/// region -> the continent (the first when climbing in the hierarchy of regions), including it or 0, if there is none
|
||||
RegionParents continent;
|
||||
/// регион -> континет (последний при подъёме по иерархии регионов), включающий его или 0, если такого нет
|
||||
/// region -> the continent (the latter when you climb the hierarchy of regions), including it or 0, if there is none
|
||||
RegionParents top_continent;
|
||||
|
||||
/// регион -> население или 0, если неизвестно.
|
||||
/// region -> population or 0, if unknown.
|
||||
RegionPopulations populations;
|
||||
|
||||
/// регион - глубина в дереве
|
||||
/// region - depth in the tree
|
||||
RegionDepths depths;
|
||||
|
||||
/// path to file with data
|
||||
@ -64,7 +64,7 @@ public:
|
||||
RegionsHierarchy();
|
||||
RegionsHierarchy(const std::string & path_);
|
||||
|
||||
/// Перезагружает, при необходимости, иерархию регионов. Непотокобезопасно.
|
||||
/// Reloads, if necessary, the hierarchy of regions. Not threadsafe.
|
||||
void reload();
|
||||
|
||||
|
||||
|
@ -7,14 +7,14 @@
|
||||
#include <Core/StringRef.h>
|
||||
|
||||
|
||||
/** Класс, позволяющий узнавать по id региона его текстовое название на одном из поддерживаемых языков: ru, en, ua, by, kz, tr.
|
||||
/** A class that allows you to recognize by region id its text name in one of the supported languages: ru, en, ua, by, kz, tr.
|
||||
*
|
||||
* Информацию об именах регионов загружает из текстовых файлов с названиями следующего формата:
|
||||
* Information about region names loads from text files with the following format names:
|
||||
* regions_names_xx.txt,
|
||||
* где xx - одно из двух буквенных обозначений следующих поддерживаемых языков:
|
||||
* where xx is one of the two letters of the following supported languages:
|
||||
* ru, en, ua, by, kz, tr.
|
||||
*
|
||||
* Умеет, по запросу, обновлять данные.
|
||||
* Can on request update the data.
|
||||
*/
|
||||
class RegionsNames
|
||||
{
|
||||
@ -65,7 +65,7 @@ private:
|
||||
using StringRefsForLanguageID = std::vector<StringRefs>;
|
||||
|
||||
public:
|
||||
/** Перезагружает, при необходимости, имена регионов.
|
||||
/** Reboot, if necessary, the names of regions.
|
||||
*/
|
||||
void reload();
|
||||
void reload(const std::string & directory);
|
||||
@ -112,9 +112,9 @@ private:
|
||||
|
||||
ModificationTimes file_modification_times = ModificationTimes(SUPPORTED_LANGUAGES_COUNT);
|
||||
|
||||
/// Байты имен для каждого языка, уложенные подряд, разделенные нулями
|
||||
/// Bytes of names for each language, laid out in a row, separated by zeros
|
||||
CharsForLanguageID chars = CharsForLanguageID(SUPPORTED_LANGUAGES_COUNT);
|
||||
|
||||
/// Отображение для каждого языка из id региона в указатель на диапазон байт имени
|
||||
/// Mapping for each language from the region id into a pointer to the byte range of the name
|
||||
StringRefsForLanguageID names_refs = StringRefsForLanguageID(SUPPORTED_LANGUAGES_COUNT);
|
||||
};
|
||||
|
@ -4,9 +4,9 @@
|
||||
#include <common/Types.h>
|
||||
|
||||
|
||||
/** @brief Класс, позволяющий узнавать, принадлежит ли поисковая система или операционная система
|
||||
* другой поисковой или операционной системе, соответственно.
|
||||
* Информацию об иерархии регионов загружает из БД.
|
||||
/** @brief Class that lets you know if a search engine or operating system belongs
|
||||
* another search engine or operating system, respectively.
|
||||
* Information about the hierarchy of regions is downloaded from the database.
|
||||
*/
|
||||
class TechDataHierarchy
|
||||
{
|
||||
@ -21,7 +21,7 @@ public:
|
||||
static bool isConfigured();
|
||||
|
||||
|
||||
/// Отношение "принадлежит".
|
||||
/// The "belongs" relation.
|
||||
bool isOSIn(UInt8 lhs, UInt8 rhs) const
|
||||
{
|
||||
while (lhs != rhs && os_parent[lhs])
|
||||
@ -50,7 +50,7 @@ public:
|
||||
}
|
||||
|
||||
|
||||
/// К самому верхнему предку.
|
||||
/// To the topmost ancestor.
|
||||
UInt8 OSToMostAncestor(UInt8 x) const
|
||||
{
|
||||
while (os_parent[x])
|
||||
|
Loading…
Reference in New Issue
Block a user