#pragma once #include #include #include namespace DB { /** Implements a table engine for the system table "zeros". * The table contains the only column zero UInt8. * From this table, you can read non-materialized zeros. * * You could also specify a limit (how many zeros to give). * If multithreaded is specified, zeros will be generated in several streams. */ class StorageSystemZeros final : public ext::shared_ptr_helper, public IStorage { friend struct ext::shared_ptr_helper; public: std::string getName() const override { return "SystemZeros"; } Pipe read( const Names & column_names, const StorageMetadataPtr & /*metadata_snapshot*/, SelectQueryInfo & query_info, const Context & context, QueryProcessingStage::Enum processed_stage, size_t max_block_size, unsigned num_streams) override; bool hasEvenlyDistributedRead() const override { return true; } private: bool multithreaded; std::optional limit; protected: /// If even_distribution is true, numbers are distributed evenly between streams. /// Otherwise, streams concurrently increment atomic. StorageSystemZeros(const StorageID & table_id_, bool multithreaded_, std::optional limit_ = std::nullopt); }; }