void MaterializingScan::executePlanOperation() { const auto& in = input.getTable(0); auto result = std::dynamic_pointer_cast<Table<>>(in->copy_structure(nullptr, true, in->size(), false)); if (_num_samples == 0) { result->resize(in->size()); for (size_t row = 0; row < in->size(); row++) { result->copyRowFrom(in, row, row, false, false /*_use_memcpy*/); } } else { result->resize(_num_samples); for (size_t row = 0; row < _samples.size(); row++) { result->copyRowFrom(input.getTable(0), _samples[row], row, _copy_values, false /*_use_memcpy*/); } } addResult(result); }
void SimpleTableScan::executeMaterialized() { auto tbl = input.getTable(0); auto result_table = tbl->copy_structure_modifiable(); size_t target_row = 0; size_t row = _ofDelta ? checked_pointer_cast<const storage::Store>(tbl)->deltaOffset() : 0; for (size_t input_size = tbl->size(); row < input_size; ++row) { if ((*_comparator)(row)) { // TODO materializing result set will make the allocation the boundary result_table->resize(target_row + 1); result_table->copyRowFrom(input.getTable(0), row, target_row++, true /* Copy Value*/, false /* Use Memcpy */); } } addResult(result_table); }