| 62 | } |
| 63 | |
| 64 | QueryPlanStepPtr PlanSegmentSourceStep::generateStep() |
| 65 | { |
| 66 | StoragePtr storage = DatabaseCatalog::instance().getTable({storage_id.database_name, storage_id.table_name}, context); |
| 67 | auto storage_snapshot = storage->getStorageSnapshot(storage->getInMemoryMetadataPtr(), context); |
| 68 | |
| 69 | auto pipe = storage->read(column_names, |
| 70 | storage_snapshot, |
| 71 | query_info, |
| 72 | context, |
| 73 | processed_stage, |
| 74 | max_block_size, |
| 75 | num_streams); |
| 76 | |
| 77 | if (pipe.empty()) |
| 78 | { |
| 79 | auto header = storage->getInMemoryMetadataPtr()->getSampleBlockForColumns(column_names, storage->getVirtuals(), storage_id); |
| 80 | auto null_pipe = InterpreterSelectQuery::generateNullSourcePipe(header, query_info); |
| 81 | auto read_from_pipe = std::make_unique<ReadFromPreparedSource>(std::move(null_pipe)); |
| 82 | read_from_pipe->setStepDescription("Read from NullSource"); |
| 83 | return read_from_pipe; |
| 84 | } |
| 85 | else |
| 86 | return std::make_unique<ReadFromStorageStep>(std::move(pipe), step_description); |
| 87 | } |
| 88 | |
| 89 | std::shared_ptr<IQueryPlanStep> PlanSegmentSourceStep::copy(ContextPtr) const |
| 90 | { |
nothing calls this directly
no test coverage detected