| 91 | } // namespace |
| 92 | |
| 93 | ArrayVectorPtr flattenArray( |
| 94 | const SelectivityVector& rows, |
| 95 | const VectorPtr& vector, |
| 96 | DecodedVector& decodedVector) { |
| 97 | if (decodedVector.isIdentityMapping()) { |
| 98 | return std::dynamic_pointer_cast<ArrayVector>(vector); |
| 99 | } |
| 100 | |
| 101 | auto newNumElements = countElements<ArrayVector>(rows, decodedVector); |
| 102 | |
| 103 | BufferPtr newNulls; |
| 104 | BufferPtr elementIndices; |
| 105 | BufferPtr newSizes; |
| 106 | BufferPtr newOffsets; |
| 107 | flattenBuffers<ArrayVector>( |
| 108 | rows, |
| 109 | newNumElements, |
| 110 | decodedVector, |
| 111 | newNulls, |
| 112 | elementIndices, |
| 113 | newSizes, |
| 114 | newOffsets); |
| 115 | |
| 116 | auto array = decodedVector.base()->as<ArrayVector>(); |
| 117 | return std::make_shared<ArrayVector>( |
| 118 | array->pool(), |
| 119 | array->type(), |
| 120 | newNulls, |
| 121 | rows.end(), |
| 122 | newOffsets, |
| 123 | newSizes, |
| 124 | BaseVector::wrapInDictionary( |
| 125 | BufferPtr(nullptr), |
| 126 | elementIndices, |
| 127 | newNumElements, |
| 128 | array->elements())); |
| 129 | } |
| 130 | |
| 131 | MapVectorPtr flattenMap( |
| 132 | const SelectivityVector& rows, |
no test coverage detected