Coverage Report

Created: 2026-10-27 14:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exec/scan/file_scan_range_utils.h
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#pragma once
19
20
#include "common/status.h"
21
#include "gen_cpp/PlanNodes_types.h"
22
23
namespace doris {
24
25
inline Status validate_file_scan_support(const TFileScanRangeParams& params,
26
39
                                         const TFileRangeDesc* range = nullptr) {
27
    // Deprecated table markers must never fall through to plain file reads: that would lose
28
    // Hive transaction visibility and LakeSoul merge semantics, including in metadata counts.
29
39
    auto validate_table = [](const TTableFormatFileDesc& table) -> Status {
30
29
        if (table.table_format_type == "transactional_hive") {
31
3
            return Status::NotSupported("Hive transactional table reads are no longer supported");
32
3
        }
33
26
        if (table.table_format_type == "lakesoul") {
34
4
            return Status::NotSupported("LakeSoul reads are no longer supported");
35
4
        }
36
22
        return Status::OK();
37
26
    };
38
39
    if (params.__isset.table_format_params) {
39
6
        RETURN_IF_ERROR(validate_table(params.table_format_params));
40
6
    }
41
35
    if (range != nullptr && range->__isset.table_format_params) {
42
23
        RETURN_IF_ERROR(validate_table(range->table_format_params));
43
23
    }
44
32
    const auto format = range != nullptr && range->__isset.format_type ? range->format_type
45
32
                                                                       : params.format_type;
46
32
    if (format == TFileFormatType::FORMAT_AVRO) {
47
2
        return Status::NotSupported("Avro file reads are no longer supported");
48
2
    }
49
30
    return Status::OK();
50
32
}
51
52
16
inline bool can_ignore_not_found_file(const TFileRangeDesc& range, bool ignore_not_found) {
53
    // Iceberg ranges belong to a committed snapshot, not a stale directory listing. Skipping a
54
    // missing data or delete file would silently return an incomplete or incorrect snapshot.
55
16
    return ignore_not_found && !(range.__isset.table_format_params &&
56
8
                                 range.table_format_params.table_format_type == "iceberg");
57
16
}
58
59
} // namespace doris