| 118 | } |
| 119 | |
| 120 | void EvalCtx::ensureErrorsVectorSize(ErrorVectorPtr& vector, vector_size_t size) |
| 121 | const { |
| 122 | auto oldSize = vector ? vector->size() : 0; |
| 123 | if (!vector) { |
| 124 | vector = std::make_shared<ErrorVector>( |
| 125 | pool(), |
| 126 | OpaqueType::create<void>(), |
| 127 | AlignedBuffer::allocate<bool>(size, pool(), false) /*nulls*/, |
| 128 | size /*length*/, |
| 129 | AlignedBuffer::allocate<ErrorVector::value_type>( |
| 130 | size, pool(), ErrorVector::value_type()), |
| 131 | std::vector<BufferPtr>(0), |
| 132 | SimpleVectorStats<std::shared_ptr<void>>{}, |
| 133 | 1 /*distinctValueCount*/, |
| 134 | size /*nullCount*/, |
| 135 | false /*isSorted*/, |
| 136 | size /*representedBytes*/); |
| 137 | } else if (vector->size() < size) { |
| 138 | vector->resize(size, false); |
| 139 | // Set all new positions to null, including the one to be set. |
| 140 | for (auto i = oldSize; i < size; ++i) { |
| 141 | vector->setNull(i, true); |
| 142 | } |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | void EvalCtx::addError( |
| 147 | vector_size_t index, |