#pragma once #include #include #include #include #include #include #include namespace DB { /** When writing, does nothing. * When reading, returns nothing. */ class StorageNull final : public ext::shared_ptr_helper, public IStorage { friend struct ext::shared_ptr_helper; public: std::string getName() const override { return "Null"; } Pipes read( const Names & column_names, const SelectQueryInfo &, const Context & /*context*/, QueryProcessingStage::Enum /*processing_stage*/, size_t, unsigned) override { Pipes pipes; pipes.emplace_back(std::make_shared(getSampleBlockForColumns(column_names))); return pipes; } BlockOutputStreamPtr write(const ASTPtr &, const Context &) override { return std::make_shared(getSampleBlock()); } void checkAlterIsPossible(const AlterCommands & commands, const Settings & /* settings */) const override; void alter(const AlterCommands & params, const Context & context, TableStructureWriteLockHolder & table_lock_holder) override; std::optional totalRows() const override { return {0}; } std::optional totalBytes() const override { return {0}; } private: protected: StorageNull(const StorageID & table_id_, ColumnsDescription columns_description_, ConstraintsDescription constraints_) : IStorage(table_id_) { setColumns(std::move(columns_description_)); setConstraints(std::move(constraints_)); } }; }