When user requested single column from the table we still calculating all of them. Calculation of some columns is quite expensive (need to do stat calls / read files etc). 
#pragma once
#include <ext/shared_ptr_helper.h>
#include <Formats/FormatSettings.h>
#include <Storages/IStorage.h>
#include <Storages/MergeTree/MergeTreeData.h>
namespace DB
{
class Context;
struct StoragesInfo
{
    StoragePtr storage = nullptr;
    TableLockHolder table_lock;
    String database;
    String table;
    String engine;
    bool need_inactive_parts = false;
    MergeTreeData * data = nullptr;
    operator bool() const { return storage != nullptr; }
    MergeTreeData::DataPartsVector getParts(MergeTreeData::DataPartStateVector & state, bool has_state_column) const;
};
class StoragesInfoStream