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 |