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

Method StructInCollectionToJSON

be/src/runtime/complex-value-writer.inline.h:102–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100// tuple.
101template <class JsonStream>
102void ComplexValueWriter<JsonStream>::StructInCollectionToJSON(Tuple* item_tuple,
103 const SlotDescriptor& struct_slot_desc) {
104 const TupleDescriptor* children_tuple_desc =
105 struct_slot_desc.children_tuple_descriptor();
106 DCHECK(children_tuple_desc != nullptr);
107
108 const ColumnType& struct_type = struct_slot_desc.type();
109 const std::vector<SlotDescriptor*>& child_slots = children_tuple_desc->slots();
110
111 DCHECK(struct_type.type == TYPE_STRUCT);
112 DCHECK_EQ(child_slots.size(), struct_type.children.size());
113
114 writer_->StartObject();
115 for (int i = 0; i < child_slots.size(); ++i) {
116 writer_->String(struct_type.field_names[i].c_str());
117
118 const SlotDescriptor& child_slot_desc = *child_slots[i];
119 bool element_is_null = item_tuple->IsNull(child_slot_desc.null_indicator_offset());
120 if (element_is_null) {
121 WriteNull(writer_);
122 continue;
123 }
124
125 const ColumnType& child_type = child_slot_desc.type();
126 void* child = item_tuple->GetSlot(child_slot_desc.tuple_offset());
127 if (child_type.IsStructType()) {
128 StructInCollectionToJSON(item_tuple, child_slot_desc);
129 } else if (child_type.IsCollectionType()) {
130 const CollectionValue* nested_collection_val =
131 reinterpret_cast<CollectionValue*>(child);
132 const TupleDescriptor* child_item_tuple_desc =
133 child_slot_desc.children_tuple_descriptor();
134 DCHECK(child_item_tuple_desc != nullptr);
135 CollectionValueToJSON(*nested_collection_val, child_type.type,
136 child_item_tuple_desc);
137 } else {
138 PrimitiveValueToJSON(child, child_type, false);
139 }
140 }
141 writer_->EndObject();
142}
143
144template <class JsonStream>
145void ComplexValueWriter<JsonStream>::CollectionElementToJSON(Tuple* item_tuple,

Callers

nothing calls this directly

Calls 11

tuple_offsetMethod · 0.80
IsStructTypeMethod · 0.80
IsCollectionTypeMethod · 0.80
typeMethod · 0.45
sizeMethod · 0.45
StartObjectMethod · 0.45
StringMethod · 0.45
IsNullMethod · 0.45
GetSlotMethod · 0.45
EndObjectMethod · 0.45

Tested by

no test coverage detected