MCPcopy Create free account
hub / github.com/apache/impala / AddFileLevelVirtualColumns

Method AddFileLevelVirtualColumns

be/src/exec/file-metadata-utils.cc:102–147  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100}
101
102void FileMetadataUtils::AddFileLevelVirtualColumns(MemPool* mem_pool,
103 Tuple* template_tuple) {
104 if (template_tuple == nullptr) return;
105 for (int i = 0; i < scan_node_->virtual_column_slots().size(); ++i) {
106 const SlotDescriptor* slot_desc = scan_node_->virtual_column_slots()[i];
107 if (slot_desc->virtual_column_type() == TVirtualColumnType::INPUT_FILE_NAME) {
108 StringValue* slot = template_tuple->GetStringSlot(slot_desc->tuple_offset());
109 const char* filename = file_desc_->filename.c_str();
110 int len = strlen(filename);
111 char* filename_copy = reinterpret_cast<char*>(mem_pool->Allocate(len));
112 Ubsan::MemCpy(filename_copy, filename, len);
113 slot->Assign(filename_copy, len);
114 template_tuple->SetNotNull(slot_desc->null_indicator_offset());
115 } else if (slot_desc->virtual_column_type() ==
116 TVirtualColumnType::ICEBERG_DATA_SEQUENCE_NUMBER) {
117 using namespace org::apache::impala::fb;
118 const FbIcebergSplitMetadata* ice_metadata =
119 file_desc_->file_metadata->iceberg_metadata();
120 DCHECK(ice_metadata != nullptr);
121
122 int64_t data_seq_num = ice_metadata->data_sequence_number();
123 if (data_seq_num > -1) {
124 int64_t* slot = template_tuple->GetBigIntSlot(slot_desc->tuple_offset());
125 *slot = data_seq_num;
126 template_tuple->SetNotNull(slot_desc->null_indicator_offset());
127 } else {
128 template_tuple->SetNull(slot_desc->null_indicator_offset());
129 }
130 } else if (slot_desc->virtual_column_type() ==
131 TVirtualColumnType::ICEBERG_FIRST_ROW_ID) {
132 using namespace org::apache::impala::fb;
133 const FbIcebergSplitMetadata* ice_metadata =
134 file_desc_->file_metadata->iceberg_metadata();
135 DCHECK(ice_metadata != nullptr);
136
137 int64_t first_row_id = ice_metadata->first_row_id();
138 if (first_row_id > -1) {
139 int64_t* slot = template_tuple->GetBigIntSlot(slot_desc->tuple_offset());
140 *slot = first_row_id;
141 template_tuple->SetNotNull(slot_desc->null_indicator_offset());
142 } else {
143 template_tuple->SetNull(slot_desc->null_indicator_offset());
144 }
145 }
146 }
147}
148
149auto FileMetadataUtils::IcebergPartitionTransforms() const {
150 DCHECK(file_desc_ != nullptr);

Callers

nothing calls this directly

Calls 9

virtual_column_typeMethod · 0.80
GetStringSlotMethod · 0.80
tuple_offsetMethod · 0.80
SetNotNullMethod · 0.80
GetBigIntSlotMethod · 0.80
SetNullMethod · 0.80
sizeMethod · 0.45
AllocateMethod · 0.45
AssignMethod · 0.45

Tested by

no test coverage detected