text: #pragma once
  #include <DataStreams/IBlockInputStream.h>
  #include <Storages/MergeTree/MergeTreeData.h>
  #include <Storages/MergeTree/IMergeTreeDataPart.h>
  #include <Core/Block.h>
  #include <Storages/MergeTree/MergeTreeDataPartTTLInfo.h>
  #include <DataStreams/ITTLAlgorithm.h>
  
  #include <common/DateLUT.h>
  
  namespace DB
  {
  
  class TTLCalcInputStream : public IBlockInputStream
  {
  public:
      TTLCalcInputStream(
          const BlockInputStreamPtr & input_,
          const MergeTreeData & storage_,
          const StorageMetadataPtr & metadata_snapshot_,
          const MergeTreeData::MutableDataPartPtr & data_part_,
          time_t current_time,
          bool force_
      );
  
      String getName() const override { return "TTL_CALC"; }
      Block getHeader() const override { return header; }
  
  protected:
      Block readImpl() override;
  
      /// Finalizes ttl infos and updates data part
      void readSuffixImpl() override;
  
  private:
      std::vector<TTLAlgorithmPtr> algorithms;
  
      /// ttl_infos and empty_columns are updating while reading
      const MergeTreeData::MutableDataPartPtr & data_part;
      Poco::Logger * log;
      Block header;
  };
  
  }
  