blob: 61fca2d5f8a0831cfa0c331e946e443cb3588a4f [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#pragma once
#include <memory>
#include "core/column/column.h"
#include "core/column/subcolumn_tree.h"
#include "core/data_type/data_type.h"
namespace doris::segment_v2 {
// This file Defined ColumnIterator and ColumnReader for reading variant subcolumns. The types from read schema and from storage are
// different, so we need to wrap the ColumnIterator from execution phase and storage column reading phase.And we also
// maintain the tree structure to get the full JSON structure for variants.
// Wrapped ColumnIterator from execution phase, the type is from read schema
class ColumnIterator;
class ColumnReader;
struct SubstreamIterator {
MutableColumnPtr column;
std::unique_ptr<ColumnIterator> iterator;
std::shared_ptr<const IDataType> type;
std::shared_ptr<DataTypeSerDe> serde;
bool inited = false;
size_t rows_read = 0;
SubstreamIterator() = default;
SubstreamIterator(MutableColumnPtr&& col, std::unique_ptr<ColumnIterator>&& it,
std::shared_ptr<const IDataType> t);
};
// path -> SubstreamIterator
using SubstreamReaderTree = SubcolumnsTree<SubstreamIterator, false>;
// Meta for the storage layer, the file_column_type indicates the read type of the column in segment file
struct SubcolumnMeta {
std::shared_ptr<const IDataType> file_column_type;
int32_t footer_ordinal = -1;
};
using SubcolumnColumnMetaInfo = SubcolumnsTree<SubcolumnMeta, true>;
} // namespace doris::segment_v2