| 796 | } |
| 797 | |
| 798 | OrcMapReader::OrcMapReader(const orc::Type* node, |
| 799 | const TupleDescriptor* table_tuple_desc, HdfsOrcScanner* scanner) |
| 800 | : OrcCollectionReader(node, table_tuple_desc, scanner) { |
| 801 | if (materialize_tuple_) { |
| 802 | DCHECK(tuple_desc_ != nullptr); |
| 803 | for (SlotDescriptor* child_slot : tuple_desc_->slots()) { |
| 804 | CreateChildForSlot(node, child_slot); |
| 805 | } |
| 806 | } else { |
| 807 | const orc::Type* child_type; |
| 808 | int field; |
| 809 | if (!FindChild(*node, GetColId(table_tuple_desc), |
| 810 | &child_type, &field)) { |
| 811 | DCHECK(false) << PrintNode(node) << " has no children selected for " |
| 812 | << table_tuple_desc->DebugString(); |
| 813 | } |
| 814 | // Map type only has two children. |
| 815 | DCHECK_LE(field, 1); |
| 816 | OrcComplexColumnReader* child = OrcComplexColumnReader::CreateTopLevelReader( |
| 817 | child_type, table_tuple_desc, scanner); |
| 818 | children_.push_back(child); |
| 819 | if (field == 0) { |
| 820 | key_readers_.push_back(child); |
| 821 | } else { |
| 822 | value_readers_.push_back(child); |
| 823 | } |
| 824 | } |
| 825 | VLOG(3) << "Created MapReader for " << PrintNode(node) << ": tuple_desc_=" |
| 826 | << (tuple_desc_ != nullptr ? tuple_desc_->DebugString() : "null"); |
| 827 | } |
| 828 | |
| 829 | OrcMapReader::OrcMapReader(const orc::Type* node, const SlotDescriptor* slot_desc, |
| 830 | HdfsOrcScanner* scanner) : OrcCollectionReader(node, slot_desc, scanner) { |
nothing calls this directly
no test coverage detected