| 109 | } |
| 110 | |
| 111 | DataTypePtr getDataTypeByColumn(const IColumn & column) |
| 112 | { |
| 113 | auto idx = column.getDataType(); |
| 114 | WhichDataType which(idx); |
| 115 | if (which.isSimple()) |
| 116 | return DataTypeFactory::instance().get(String(magic_enum::enum_name(idx))); |
| 117 | |
| 118 | if (which.isNothing()) |
| 119 | return std::make_shared<DataTypeNothing>(); |
| 120 | |
| 121 | if (const auto * column_array = checkAndGetColumn<ColumnArray>(&column)) |
| 122 | return std::make_shared<DataTypeArray>(getDataTypeByColumn(column_array->getData())); |
| 123 | |
| 124 | if (const auto * column_nullable = checkAndGetColumn<ColumnNullable>(&column)) |
| 125 | return makeNullable(getDataTypeByColumn(column_nullable->getNestedColumn())); |
| 126 | |
| 127 | /// TODO: add more types. |
| 128 | throw Exception(ErrorCodes::LOGICAL_ERROR, "Cannot get data type of column {}", column.getFamilyName()); |
| 129 | } |
| 130 | |
| 131 | template <size_t I, typename Tuple> |
| 132 | static auto extractVector(const std::vector<Tuple> & vec) |
no test coverage detected