Coverage Report

Created: 2026-04-11 00:05

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