@@ -345,11 +345,6 @@ class TTableDescription::TImpl {
345345 break ;
346346 }
347347
348- // tiering
349- if (proto.tiering ().size ()) {
350- Tiering_ = proto.tiering ();
351- }
352-
353348 if (proto.store_type ()) {
354349 StoreType_ = (proto.store_type () == Ydb::Table::STORE_TYPE_COLUMN) ? EStoreType::Column : EStoreType::Row;
355350 }
@@ -580,10 +575,6 @@ class TTableDescription::TImpl {
580575 return TtlSettings_;
581576 }
582577
583- const TMaybe<TString>& GetTiering () const {
584- return Tiering_;
585- }
586-
587578 EStoreType GetStoreType () const {
588579 return StoreType_;
589580 }
@@ -664,7 +655,6 @@ class TTableDescription::TImpl {
664655 TVector<TIndexDescription> Indexes_;
665656 TVector<TChangefeedDescription> Changefeeds_;
666657 TMaybe<TTtlSettings> TtlSettings_;
667- TMaybe<TString> Tiering_;
668658 TString Owner_;
669659 TVector<NScheme::TPermissions> Permissions_;
670660 TVector<NScheme::TPermissions> EffectivePermissions_;
@@ -731,7 +721,7 @@ TMaybe<TTtlSettings> TTableDescription::GetTtlSettings() const {
731721}
732722
733723TMaybe<TString> TTableDescription::GetTiering () const {
734- return Impl_-> GetTiering ();
724+ return Nothing ();
735725}
736726
737727EStoreType TTableDescription::GetStoreType () const {
@@ -954,10 +944,6 @@ void TTableDescription::SerializeTo(Ydb::Table::CreateTableRequest& request) con
954944 ttl->SerializeTo (*request.mutable_ttl_settings ());
955945 }
956946
957- if (const auto & tiering = Impl_->GetTiering ()) {
958- request.set_tiering (*tiering);
959- }
960-
961947 if (Impl_->GetStoreType () == EStoreType::Column) {
962948 request.set_store_type (Ydb::Table::StoreType::STORE_TYPE_COLUMN);
963949 }
@@ -2941,22 +2927,80 @@ bool operator!=(const TChangefeedDescription& lhs, const TChangefeedDescription&
29412927
29422928// //////////////////////////////////////////////////////////////////////////////
29432929
2930+ namespace {
2931+
2932+ TVector<TEvictionTierSettings> DeserializeTiers (const NProtoBuf::RepeatedPtrField<Ydb::Table::EvictionTier>& serialized) {
2933+ TVector<TEvictionTierSettings> tiers;
2934+ for (const auto & tier : serialized) {
2935+ tiers.push_back (TEvictionTierSettings (tier));
2936+ }
2937+ return tiers;
2938+ }
2939+
2940+ }
2941+
2942+ TEvictionTierSettings::TEvictionTierSettings (TString storageName, TDuration evictionDelay)
2943+ : StorageName_(storageName)
2944+ , EvictionDelay_(evictionDelay)
2945+ {}
2946+
2947+ TEvictionTierSettings::TEvictionTierSettings (const Ydb::Table::EvictionTier& tier)
2948+ : StorageName_(tier.storage_name())
2949+ , EvictionDelay_(TDuration::Seconds(tier.evict_after_seconds()))
2950+ {}
2951+
2952+ void TEvictionTierSettings::SerializeTo (Ydb::Table::EvictionTier& proto) const {
2953+ proto.set_storage_name (StorageName_);
2954+ proto.set_evict_after_seconds (EvictionDelay_.Seconds ());
2955+ }
2956+
2957+ const TString& TEvictionTierSettings::GetStorageName () const {
2958+ return StorageName_;
2959+ }
2960+
2961+ TDuration TEvictionTierSettings::GetEvictionDelay () const {
2962+ return EvictionDelay_;
2963+ }
2964+
29442965TDateTypeColumnModeSettings::TDateTypeColumnModeSettings (const TString& columnName, const TDuration& expireAfter)
29452966 : ColumnName_(columnName)
29462967 , ExpireAfter_(expireAfter)
29472968{}
29482969
2970+ TDateTypeColumnModeSettings::TDateTypeColumnModeSettings (const TString& columnName, const std::optional<TDuration>& expireAfter, const TVector<TEvictionTierSettings>& tiers)
2971+ : ColumnName_(columnName)
2972+ , ExpireAfter_(expireAfter)
2973+ , Tiers_(tiers)
2974+ {}
2975+
29492976void TDateTypeColumnModeSettings::SerializeTo (Ydb::Table::DateTypeColumnModeSettings& proto) const {
29502977 proto.set_column_name (ColumnName_);
2951- proto.set_expire_after_seconds (ExpireAfter_.Seconds ());
2978+ if (ExpireAfter_) {
2979+ proto.set_expire_after_seconds (ExpireAfter_->Seconds ());
2980+ }
2981+ for (const auto & tier : Tiers_) {
2982+ tier.SerializeTo (*proto.add_storage_tiers ());
2983+ }
29522984}
29532985
29542986const TString& TDateTypeColumnModeSettings::GetColumnName () const {
29552987 return ColumnName_;
29562988}
29572989
29582990const TDuration& TDateTypeColumnModeSettings::GetExpireAfter () const {
2959- return ExpireAfter_;
2991+ if (ExpireAfter_) {
2992+ return *ExpireAfter_;
2993+ }
2994+ static constexpr TDuration DurationMax = TDuration::Max ();
2995+ return DurationMax;
2996+ }
2997+
2998+ bool TDateTypeColumnModeSettings::HasExpireAfter () const {
2999+ return !!ExpireAfter_;
3000+ }
3001+
3002+ const TVector<TEvictionTierSettings>& TDateTypeColumnModeSettings::GetTiers () const {
3003+ return Tiers_;
29603004}
29613005
29623006TValueSinceUnixEpochModeSettings::TValueSinceUnixEpochModeSettings (const TString& columnName, EUnit columnUnit, const TDuration& expireAfter)
@@ -2965,10 +3009,22 @@ TValueSinceUnixEpochModeSettings::TValueSinceUnixEpochModeSettings(const TString
29653009 , ExpireAfter_(expireAfter)
29663010{}
29673011
3012+ TValueSinceUnixEpochModeSettings::TValueSinceUnixEpochModeSettings (const TString& columnName, EUnit columnUnit, const std::optional<TDuration>& expireAfter, const TVector<TEvictionTierSettings>& tiers)
3013+ : ColumnName_(columnName)
3014+ , ColumnUnit_(columnUnit)
3015+ , ExpireAfter_(expireAfter)
3016+ , Tiers_(tiers)
3017+ {}
3018+
29683019void TValueSinceUnixEpochModeSettings::SerializeTo (Ydb::Table::ValueSinceUnixEpochModeSettings& proto) const {
29693020 proto.set_column_name (ColumnName_);
29703021 proto.set_column_unit (TProtoAccessor::GetProto (ColumnUnit_));
2971- proto.set_expire_after_seconds (ExpireAfter_.Seconds ());
3022+ if (ExpireAfter_) {
3023+ proto.set_expire_after_seconds (ExpireAfter_->Seconds ());
3024+ }
3025+ for (const auto & tier : Tiers_) {
3026+ tier.SerializeTo (*proto.Addstorage_tiers ());
3027+ }
29723028}
29733029
29743030const TString& TValueSinceUnixEpochModeSettings::GetColumnName () const {
@@ -2980,7 +3036,19 @@ TValueSinceUnixEpochModeSettings::EUnit TValueSinceUnixEpochModeSettings::GetCol
29803036}
29813037
29823038const TDuration& TValueSinceUnixEpochModeSettings::GetExpireAfter () const {
2983- return ExpireAfter_;
3039+ if (ExpireAfter_) {
3040+ return *ExpireAfter_;
3041+ }
3042+ static constexpr TDuration DurationMax = TDuration::Max ();
3043+ return DurationMax;
3044+ }
3045+
3046+ bool TValueSinceUnixEpochModeSettings::HasExpireAfter () const {
3047+ return !!ExpireAfter_;
3048+ }
3049+
3050+ const TVector<TEvictionTierSettings>& TValueSinceUnixEpochModeSettings::GetTiers () const {
3051+ return Tiers_;
29843052}
29853053
29863054void TValueSinceUnixEpochModeSettings::Out (IOutputStream& out, EUnit unit) {
@@ -3023,27 +3091,37 @@ TValueSinceUnixEpochModeSettings::EUnit TValueSinceUnixEpochModeSettings::UnitFr
30233091 return EUnit::Unknown;
30243092}
30253093
3094+ TTtlSettings::TTtlSettings (const TString& columnName, const std::optional<TDuration>& expireAfter, const TVector<TEvictionTierSettings>& tiers)
3095+ : Mode_(TDateTypeColumnModeSettings(columnName, expireAfter, tiers))
3096+ {}
3097+
30263098TTtlSettings::TTtlSettings (const TString& columnName, const TDuration& expireAfter)
3027- : Mode_(TDateTypeColumnModeSettings( columnName, expireAfter) )
3099+ : TTtlSettings( columnName, expireAfter, {} )
30283100{}
30293101
30303102TTtlSettings::TTtlSettings (const Ydb::Table::DateTypeColumnModeSettings& mode, ui32 runIntervalSeconds)
3031- : TTtlSettings(mode.column_name(), TDuration::Seconds(mode.expire_after_seconds()))
3032- {
3103+ : TTtlSettings(mode.column_name(),
3104+ mode.has_expire_after_seconds() ? std::optional<TDuration>(TDuration::Seconds(mode.expire_after_seconds())) : std::nullopt ,
3105+ DeserializeTiers (mode.storage_tiers())) {
30333106 RunInterval_ = TDuration::Seconds (runIntervalSeconds);
30343107}
30353108
30363109const TDateTypeColumnModeSettings& TTtlSettings::GetDateTypeColumn () const {
30373110 return std::get<TDateTypeColumnModeSettings>(Mode_);
30383111}
30393112
3113+ TTtlSettings::TTtlSettings (const TString& columnName, EUnit columnUnit, const std::optional<TDuration>& expireAfter, const TVector<TEvictionTierSettings>& tiers)
3114+ : Mode_(TValueSinceUnixEpochModeSettings(columnName, columnUnit, expireAfter, tiers))
3115+ {}
3116+
30403117TTtlSettings::TTtlSettings (const TString& columnName, EUnit columnUnit, const TDuration& expireAfter)
3041- : Mode_(TValueSinceUnixEpochModeSettings( columnName, columnUnit, expireAfter) )
3118+ : TTtlSettings( columnName, columnUnit, expireAfter, {} )
30423119{}
30433120
30443121TTtlSettings::TTtlSettings (const Ydb::Table::ValueSinceUnixEpochModeSettings& mode, ui32 runIntervalSeconds)
3045- : TTtlSettings(mode.column_name(), TProtoAccessor::FromProto(mode.column_unit()), TDuration::Seconds(mode.expire_after_seconds()))
3046- {
3122+ : TTtlSettings(mode.column_name(), TProtoAccessor::FromProto(mode.column_unit()),
3123+ mode.has_expire_after_seconds() ? std::optional<TDuration>(TDuration::Seconds(mode.expire_after_seconds())) : std::nullopt,
3124+ DeserializeTiers(mode.storage_tiers())) {
30473125 RunInterval_ = TDuration::Seconds (runIntervalSeconds);
30483126}
30493127
0 commit comments