Coverage Report

Created: 2026-03-17 00:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/format/jni/jni_data_bridge.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 <memory>
21
#include <string>
22
#include <utility>
23
#include <vector>
24
25
#include "common/status.h"
26
#include "core/column/column_decimal.h"
27
#include "core/data_type/data_type.h"
28
#include "core/data_type/define_primitive_type.h"
29
#include "core/data_type/primitive_type.h"
30
#include "core/string_ref.h"
31
#include "core/types.h"
32
#include "exprs/aggregate/aggregate_function.h"
33
34
namespace doris {
35
#include "common/compile_check_begin.h"
36
37
class Block;
38
template <PrimitiveType T>
39
class ColumnDecimal;
40
template <PrimitiveType T>
41
class ColumnVector;
42
43
/**
44
 * JniDataBridge is a stateless utility class that handles data exchange
45
 * between C++ Blocks and Java-side shared memory via JNI.
46
 *
47
 * It is data-source agnostic — it only cares about data types and Block structure.
48
 * All methods are static.
49
 *
50
 * This class was extracted from JniConnector to separate the data exchange
51
 * concerns from the JNI scanner lifecycle management.
52
 */
53
class JniDataBridge {
54
public:
55
    /**
56
     * Helper class to read metadata from the address returned by Java side.
57
     * The metadata is stored as a long array in shared memory.
58
     */
59
    class TableMetaAddress {
60
    private:
61
        long* _meta_ptr;
62
        int _meta_index;
63
64
    public:
65
0
        TableMetaAddress() {
66
0
            _meta_ptr = nullptr;
67
0
            _meta_index = 0;
68
0
        }
69
70
0
        TableMetaAddress(long meta_addr) {
71
0
            _meta_ptr = static_cast<long*>(reinterpret_cast<void*>(meta_addr));
72
0
            _meta_index = 0;
73
0
        }
74
75
0
        void set_meta(long meta_addr) {
76
0
            _meta_ptr = static_cast<long*>(reinterpret_cast<void*>(meta_addr));
77
0
            _meta_index = 0;
78
0
        }
79
80
0
        long next_meta_as_long() { return _meta_ptr[_meta_index++]; }
81
82
0
        void* next_meta_as_ptr() { return reinterpret_cast<void*>(_meta_ptr[_meta_index++]); }
83
    };
84
85
    // =========================================================================
86
    // Read direction: Java shared memory → C++ Block
87
    // =========================================================================
88
89
    /**
90
     * Fill specified columns in a Block from a Java-side table address.
91
     * The table_address points to metadata returned by Java JniScanner/JdbcExecutor.
92
     */
93
    static Status fill_block(Block* block, const ColumnNumbers& arguments, long table_address);
94
95
    /**
96
     * Fill a single column from a TableMetaAddress. Supports all Doris types
97
     * including nested types (Array, Map, Struct).
98
     */
99
    static Status fill_column(TableMetaAddress& address, ColumnPtr& doris_column,
100
                              const DataTypePtr& data_type, size_t num_rows);
101
102
    // =========================================================================
103
    // Write direction: C++ Block → Java shared memory
104
    // =========================================================================
105
106
    /**
107
     * Serialize all columns of a Block into a long[] metadata array
108
     * that Java side can read via VectorTable.createReadableTable().
109
     */
110
    static Status to_java_table(Block* block, std::unique_ptr<long[]>& meta);
111
112
    /**
113
     * Serialize specified columns of a Block into a long[] metadata array.
114
     */
115
    static Status to_java_table(Block* block, size_t num_rows, const ColumnNumbers& arguments,
116
                                std::unique_ptr<long[]>& meta);
117
118
    /**
119
     * Parse Block schema into JNI format strings.
120
     * Returns (required_fields, columns_types) pair.
121
     */
122
    static std::pair<std::string, std::string> parse_table_schema(Block* block);
123
124
    static std::pair<std::string, std::string> parse_table_schema(Block* block,
125
                                                                  const ColumnNumbers& arguments,
126
                                                                  bool ignore_column_name = true);
127
128
    // =========================================================================
129
    // Type mapping
130
    // =========================================================================
131
132
    /**
133
     * Convert a Doris DataType to its JNI type string representation.
134
     * e.g., TYPE_INT -> "int", TYPE_DECIMAL128I -> "decimal128(p,s)"
135
     */
136
    static std::string get_jni_type(const DataTypePtr& data_type);
137
138
    /**
139
     * Like get_jni_type but preserves varchar/char length info in the type string.
140
     * e.g., TYPE_VARCHAR -> "varchar(len)" instead of just "string"
141
     */
142
    static std::string get_jni_type_with_different_string(const DataTypePtr& data_type);
143
144
private:
145
    // Column fill helpers for various types
146
    static Status _fill_string_column(TableMetaAddress& address, MutableColumnPtr& doris_column,
147
                                      size_t num_rows);
148
149
    static Status _fill_varbinary_column(TableMetaAddress& address, MutableColumnPtr& doris_column,
150
                                         size_t num_rows);
151
152
    static Status _fill_array_column(TableMetaAddress& address, MutableColumnPtr& doris_column,
153
                                     const DataTypePtr& data_type, size_t num_rows);
154
155
    static Status _fill_map_column(TableMetaAddress& address, MutableColumnPtr& doris_column,
156
                                   const DataTypePtr& data_type, size_t num_rows);
157
158
    static Status _fill_struct_column(TableMetaAddress& address, MutableColumnPtr& doris_column,
159
                                      const DataTypePtr& data_type, size_t num_rows);
160
161
    /**
162
     * Fill column metadata (addresses) for a single column, used by to_java_table.
163
     */
164
    static Status _fill_column_meta(const ColumnPtr& doris_column, const DataTypePtr& data_type,
165
                                    std::vector<long>& meta_data);
166
167
    // Fixed-length column fill specializations
168
    template <typename COLUMN_TYPE, typename CPP_TYPE>
169
        requires(!std::is_same_v<COLUMN_TYPE, ColumnDecimal128V2> &&
170
                 !std::is_same_v<COLUMN_TYPE, ColumnDate> &&
171
                 !std::is_same_v<COLUMN_TYPE, ColumnDateTime> &&
172
                 !std::is_same_v<COLUMN_TYPE, ColumnDateV2> &&
173
                 !std::is_same_v<COLUMN_TYPE, ColumnDateTimeV2> &&
174
                 !std::is_same_v<COLUMN_TYPE, ColumnTimeStampTz>)
175
    static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr,
176
0
                                            size_t num_rows) {
177
0
        auto& column_data = assert_cast<COLUMN_TYPE&>(*doris_column).get_data();
178
0
        size_t origin_size = column_data.size();
179
0
        column_data.resize(origin_size + num_rows);
180
0
        memcpy(column_data.data() + origin_size, ptr, sizeof(CPP_TYPE) * num_rows);
181
0
        return Status::OK();
182
0
    }
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE3EEEaQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE2EEEhQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE4EEEsQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE5EEEiQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE6EEElQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE7EEEnQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE8EEEfQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE9EEEdQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_13ColumnDecimalILNS_13PrimitiveTypeE30EEEnQaaaaaaaaaantsr3stdE9is_same_vIT_NS2_ILS3_20EEEEntsr3stdE9is_same_vIS5_NS_12ColumnVectorILS3_11EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_13ColumnDecimalILNS_13PrimitiveTypeE28EEEiQaaaaaaaaaantsr3stdE9is_same_vIT_NS2_ILS3_20EEEEntsr3stdE9is_same_vIS5_NS_12ColumnVectorILS3_11EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_13ColumnDecimalILNS_13PrimitiveTypeE29EEElQaaaaaaaaaantsr3stdE9is_same_vIT_NS2_ILS3_20EEEEntsr3stdE9is_same_vIS5_NS_12ColumnVectorILS3_11EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS7_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE36EEEjQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE37EEEoQaaaaaaaaaantsr3stdE9is_same_vIT_NS_13ColumnDecimalILS3_20EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_11EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_12EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_25EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_26EEEEntsr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrISF_EEPT0_m
183
184
    template <typename COLUMN_TYPE, typename CPP_TYPE>
185
        requires(std::is_same_v<COLUMN_TYPE, ColumnDate> ||
186
                 std::is_same_v<COLUMN_TYPE, ColumnDateTime>)
187
    static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr,
188
0
                                            size_t num_rows) {
189
0
        auto& column_data = assert_cast<COLUMN_TYPE&>(*doris_column).get_data();
190
0
        size_t origin_size = column_data.size();
191
0
        column_data.resize(origin_size + num_rows);
192
0
        memcpy((int64_t*)column_data.data() + origin_size, ptr, sizeof(CPP_TYPE) * num_rows);
193
0
        return Status::OK();
194
0
    }
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE11EEElQoosr3stdE9is_same_vIT_S4_Esr3stdE9is_same_vIS5_NS2_ILS3_12EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrIS9_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE12EEElQoosr3stdE9is_same_vIT_NS2_ILS3_11EEEEsr3stdE9is_same_vIS5_S4_EEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrIS9_EEPT0_m
195
196
    template <typename COLUMN_TYPE, typename CPP_TYPE>
197
        requires(std::is_same_v<COLUMN_TYPE, ColumnDateV2>)
198
    static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr,
199
0
                                            size_t num_rows) {
200
0
        auto& column_data = assert_cast<COLUMN_TYPE&>(*doris_column).get_data();
201
0
        size_t origin_size = column_data.size();
202
0
        column_data.resize(origin_size + num_rows);
203
0
        memcpy((uint32_t*)column_data.data() + origin_size, ptr, sizeof(CPP_TYPE) * num_rows);
204
0
        return Status::OK();
205
0
    }
206
207
    template <typename COLUMN_TYPE, typename CPP_TYPE>
208
        requires(std::is_same_v<COLUMN_TYPE, ColumnDateTimeV2> ||
209
                 std::is_same_v<COLUMN_TYPE, ColumnTimeStampTz>)
210
    static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr,
211
0
                                            size_t num_rows) {
212
0
        auto& column_data = assert_cast<COLUMN_TYPE&>(*doris_column).get_data();
213
0
        size_t origin_size = column_data.size();
214
0
        column_data.resize(origin_size + num_rows);
215
0
        memcpy((uint64_t*)column_data.data() + origin_size, ptr, sizeof(CPP_TYPE) * num_rows);
216
0
        return Status::OK();
217
0
    }
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE26EEEmQoosr3stdE9is_same_vIT_S4_Esr3stdE9is_same_vIS5_NS2_ILS3_42EEEEEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrIS9_EEPT0_m
Unexecuted instantiation: _ZN5doris13JniDataBridge25_fill_fixed_length_columnINS_12ColumnVectorILNS_13PrimitiveTypeE42EEEmQoosr3stdE9is_same_vIT_NS2_ILS3_26EEEEsr3stdE9is_same_vIS5_S4_EEENS_6StatusERNS_3COWINS_7IColumnEE11mutable_ptrIS9_EEPT0_m
218
219
    template <typename COLUMN_TYPE, typename CPP_TYPE>
220
        requires(std::is_same_v<COLUMN_TYPE, ColumnDecimal128V2>)
221
    static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr,
222
0
                                            size_t num_rows) {
223
0
        auto& column_data = assert_cast<COLUMN_TYPE&>(*doris_column).get_data();
224
0
        size_t origin_size = column_data.size();
225
0
        column_data.resize(origin_size + num_rows);
226
0
        for (size_t i = 0; i < num_rows; i++) {
227
0
            column_data[origin_size + i] = DecimalV2Value(ptr[i]);
228
0
        }
229
0
        return Status::OK();
230
0
    }
231
232
    template <typename COLUMN_TYPE>
233
0
    static long _get_fixed_length_column_address(const IColumn& doris_column) {
234
0
        return (long)assert_cast<const COLUMN_TYPE&>(doris_column).get_data().data();
235
0
    }
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE3EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE2EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE4EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE5EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE6EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE7EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE8EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE9EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_13ColumnDecimalILNS_13PrimitiveTypeE20EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_13ColumnDecimalILNS_13PrimitiveTypeE30EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_13ColumnDecimalILNS_13PrimitiveTypeE28EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_13ColumnDecimalILNS_13PrimitiveTypeE29EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE11EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE25EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE12EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE26EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE42EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE36EEEEElRKNS_7IColumnE
Unexecuted instantiation: _ZN5doris13JniDataBridge32_get_fixed_length_column_addressINS_12ColumnVectorILNS_13PrimitiveTypeE37EEEEElRKNS_7IColumnE
236
};
237
238
#include "common/compile_check_end.h"
239
} // namespace doris