| 123 | } |
| 124 | |
| 125 | bool ParquetLevelDecoder::FillCache(int batch_size, int* num_cached_levels) { |
| 126 | DCHECK(!CacheHasNext()); |
| 127 | DCHECK(num_cached_levels != nullptr); |
| 128 | DCHECK_GE(max_level_, 0); |
| 129 | DCHECK_GE(*num_cached_levels, 0); |
| 130 | cached_level_idx_ = 0; |
| 131 | if (max_level_ == 0) { |
| 132 | // No levels to read, e.g., because the field is required. The cache was |
| 133 | // already initialized with all zeros, so we can hand out those values. |
| 134 | *num_cached_levels = batch_size; |
| 135 | return true; |
| 136 | } |
| 137 | *num_cached_levels = rle_decoder_.GetValues(batch_size, cached_levels_); |
| 138 | return *num_cached_levels > 0; |
| 139 | } |
| 140 | |
| 141 | } // namespace impala |