ClickHouse/src/DataTypes/ObjectUtils.h

49 lines
1.7 KiB
C++
Raw Normal View History

2021-04-23 23:56:26 +00:00
#pragma once
#include <Core/Block.h>
#include <Core/NamesAndTypes.h>
#include <Common/FieldVisitors.h>
#include <Storages/ColumnsDescription.h>
2021-12-01 02:58:24 +00:00
#include <DataTypes/DataTypeTuple.h>
#include <DataTypes/Serializations/JSONDataParser.h>
2021-04-23 23:56:26 +00:00
namespace DB
{
size_t getNumberOfDimensions(const IDataType & type);
size_t getNumberOfDimensions(const IColumn & column);
DataTypePtr getBaseTypeOfArray(const DataTypePtr & type);
DataTypePtr createArrayOfType(DataTypePtr type, size_t dimension);
2021-12-23 12:28:40 +00:00
ColumnPtr getBaseColumnOfArray(const ColumnPtr & column);
ColumnPtr createArrayOfColumn(const ColumnPtr & column, size_t num_dimensions);
2021-04-23 23:56:26 +00:00
DataTypePtr getDataTypeByColumn(const IColumn & column);
void convertObjectsToTuples(NamesAndTypesList & columns_list, Block & block, const NamesAndTypesList & extended_storage_columns);
2021-12-01 02:58:24 +00:00
void checkObjectHasNoAmbiguosPaths(const Paths & paths);
DataTypePtr getLeastCommonTypeForObject(const DataTypes & types, bool check_ambiguos_paths = false);
NameSet getNamesOfObjectColumns(const NamesAndTypesList & columns_list);
void extendObjectColumns(NamesAndTypesList & columns_list, const ColumnsDescription & object_columns, bool with_subcolumns);
2021-12-01 02:58:24 +00:00
using DataTypeTuplePtr = std::shared_ptr<DataTypeTuple>;
std::pair<Paths, DataTypes> flattenTuple(const DataTypePtr & type);
DataTypePtr unflattenTuple(
const Paths & paths,
const DataTypes & tuple_types);
std::pair<DataTypePtr, ColumnPtr> unflattenTuple(
const Paths & paths,
const DataTypes & tuple_types,
const Columns & tuple_columns);
void replaceMissedSubcolumnsByConstants(
const ColumnsDescription & expected_columns,
const ColumnsDescription & available_columns,
ASTPtr query);
void finalizeObjectColumns(MutableColumns & columns);
2021-04-23 23:56:26 +00:00
}