Skip to content

Commit dd73600

Browse files
committed
Added constructor of options.TimeToLiveSettings
Changed fluent modifiers of `options.TimeToLiveSettings`
1 parent 0683bc1 commit dd73600

File tree

6 files changed

+94
-158
lines changed

6 files changed

+94
-158
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
* Added fluent modifiers for `options.TimeToLiveSettings`
1+
* Added constructor of `options.TimeToLiveSettings` and fluent modifiers
22

33
## v3.40.0
44
* Added `options.WithAddAttribute` and `options.WithDropAttribute` options for `session.AlterTable` request

internal/table/session.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ func (s *session) DescribeTable(
426426
KeyBloomFilter: feature.FromYDB(result.GetKeyBloomFilter()),
427427
PartitioningSettings: options.NewPartitioningSettings(result.GetPartitioningSettings()),
428428
Indexes: indexes,
429-
TimeToLiveSettings: options.NewTimeToLiveSettings(result.GetTtlSettings()),
429+
TimeToLiveSettings: NewTimeToLiveSettings(result.GetTtlSettings()),
430430
Changefeeds: changeFeeds,
431431
}, nil
432432
}

internal/table/ttl.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package table
2+
3+
import (
4+
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Table"
5+
6+
"github.com/ydb-platform/ydb-go-sdk/v3/table/options"
7+
)
8+
9+
func NewTimeToLiveSettings(settings *Ydb_Table.TtlSettings) *options.TimeToLiveSettings {
10+
if settings == nil {
11+
return nil
12+
}
13+
switch mode := settings.Mode.(type) {
14+
case *Ydb_Table.TtlSettings_DateTypeColumn:
15+
return &options.TimeToLiveSettings{
16+
ColumnName: mode.DateTypeColumn.ColumnName,
17+
ExpireAfterSeconds: mode.DateTypeColumn.ExpireAfterSeconds,
18+
Mode: options.TimeToLiveModeDateType,
19+
}
20+
21+
case *Ydb_Table.TtlSettings_ValueSinceUnixEpoch:
22+
return &options.TimeToLiveSettings{
23+
ColumnName: mode.ValueSinceUnixEpoch.ColumnName,
24+
ColumnUnit: timeToLiveUnit(mode.ValueSinceUnixEpoch.ColumnUnit),
25+
ExpireAfterSeconds: mode.ValueSinceUnixEpoch.ExpireAfterSeconds,
26+
Mode: options.TimeToLiveModeValueSinceUnixEpoch,
27+
}
28+
}
29+
return nil
30+
}
31+
32+
func timeToLiveUnit(unit Ydb_Table.ValueSinceUnixEpochModeSettings_Unit) *options.TimeToLiveUnit {
33+
var res options.TimeToLiveUnit
34+
switch unit {
35+
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_SECONDS:
36+
res = options.TimeToLiveUnitSeconds
37+
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_MILLISECONDS:
38+
res = options.TimeToLiveUnitMilliseconds
39+
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_MICROSECONDS:
40+
res = options.TimeToLiveUnitMicroseconds
41+
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_NANOSECONDS:
42+
res = options.TimeToLiveUnitNanoseconds
43+
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_UNSPECIFIED:
44+
res = options.TimeToLiveUnitUnspecified
45+
default:
46+
panic("ydb: unknown Ydb unit for value since epoch")
47+
}
48+
return &res
49+
}

table/example_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,9 @@ func Example_alterTable() {
159159
return s.AlterTable(ctx, path.Join(db.Name(), "series"),
160160
options.WithAddColumn("series_id", types.Optional(types.TypeUint64)),
161161
options.WithAddColumn("title", types.Optional(types.TypeText)),
162-
options.WithSetTimeToLiveSettings(options.TimeToLiveSettings{
163-
ColumnName: "expire_at",
164-
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
165-
}.ColumnUnitSeconds()),
162+
options.WithSetTimeToLiveSettings(
163+
options.NewTTLSettings().ColumnDateType("expire_at").ExpireAfter(time.Hour),
164+
),
166165
options.WithAddIndex("idx_series_series_id",
167166
options.WithIndexColumns("series_id"),
168167
options.WithDataColumns("title"),

table/options/models.go

Lines changed: 26 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -442,73 +442,52 @@ const (
442442
TimeToLiveModeValueSinceUnixEpoch
443443
)
444444

445-
func (ttl TimeToLiveSettings) WithColumnName(columnName string) TimeToLiveSettings {
446-
ttl.ColumnName = columnName
447-
return ttl
448-
}
449-
450-
func (ttl TimeToLiveSettings) ExpireAfter(expireAfter time.Duration) TimeToLiveSettings {
451-
ttl.ExpireAfterSeconds = uint32(expireAfter.Seconds())
452-
return ttl
453-
}
454-
455-
func (ttl TimeToLiveSettings) WithMode(mode TimeToLiveMode) TimeToLiveSettings {
456-
ttl.Mode = mode
457-
return ttl
445+
func NewTTLSettings() TimeToLiveSettings {
446+
return TimeToLiveSettings{
447+
Mode: TimeToLiveModeDateType,
448+
}
458449
}
459450

460-
func (ttl TimeToLiveSettings) ModeDate() TimeToLiveSettings {
451+
func (ttl TimeToLiveSettings) ColumnDateType(columnName string) TimeToLiveSettings {
461452
ttl.Mode = TimeToLiveModeDateType
462-
ttl.ColumnUnit = nil
453+
ttl.ColumnName = columnName
463454
return ttl
464455
}
465456

466-
func (ttl TimeToLiveSettings) ModeSinceEpoch() TimeToLiveSettings {
467-
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
468-
if ttl.ColumnUnit == nil {
469-
return ttl.ColumnUnitSeconds()
470-
}
471-
return ttl
457+
func unitToPointer(unit TimeToLiveUnit) *TimeToLiveUnit {
458+
return &unit
472459
}
473460

474-
func (ttl TimeToLiveSettings) WithColumnUnit(columnUnit TimeToLiveUnit) TimeToLiveSettings {
475-
ttl.ColumnUnit = &columnUnit
461+
func (ttl TimeToLiveSettings) ColumnSeconds(columnName string) TimeToLiveSettings {
462+
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
463+
ttl.ColumnName = columnName
464+
ttl.ColumnUnit = unitToPointer(TimeToLiveUnitSeconds)
476465
return ttl
477466
}
478467

479-
func (ttl TimeToLiveSettings) ColumnUnitSeconds() TimeToLiveSettings {
480-
if ttl.Mode != TimeToLiveModeValueSinceUnixEpoch {
481-
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
482-
}
483-
columnUnit := TimeToLiveUnitSeconds
484-
ttl.ColumnUnit = &columnUnit
468+
func (ttl TimeToLiveSettings) ColumnMilliseconds(columnName string) TimeToLiveSettings {
469+
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
470+
ttl.ColumnName = columnName
471+
ttl.ColumnUnit = unitToPointer(TimeToLiveUnitMilliseconds)
485472
return ttl
486473
}
487474

488-
func (ttl TimeToLiveSettings) ColumnUnitMilliseconds() TimeToLiveSettings {
489-
if ttl.Mode != TimeToLiveModeValueSinceUnixEpoch {
490-
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
491-
}
492-
columnUnit := TimeToLiveUnitMilliseconds
493-
ttl.ColumnUnit = &columnUnit
475+
func (ttl TimeToLiveSettings) ColumnMicroseconds(columnName string) TimeToLiveSettings {
476+
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
477+
ttl.ColumnName = columnName
478+
ttl.ColumnUnit = unitToPointer(TimeToLiveUnitMicroseconds)
494479
return ttl
495480
}
496481

497-
func (ttl TimeToLiveSettings) ColumnUnitMicroseconds() TimeToLiveSettings {
498-
if ttl.Mode != TimeToLiveModeValueSinceUnixEpoch {
499-
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
500-
}
501-
columnUnit := TimeToLiveUnitMicroseconds
502-
ttl.ColumnUnit = &columnUnit
482+
func (ttl TimeToLiveSettings) ColumnNanoseconds(columnName string) TimeToLiveSettings {
483+
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
484+
ttl.ColumnName = columnName
485+
ttl.ColumnUnit = unitToPointer(TimeToLiveUnitNanoseconds)
503486
return ttl
504487
}
505488

506-
func (ttl TimeToLiveSettings) ColumnUnitNanoseconds() TimeToLiveSettings {
507-
if ttl.Mode != TimeToLiveModeValueSinceUnixEpoch {
508-
ttl.Mode = TimeToLiveModeValueSinceUnixEpoch
509-
}
510-
columnUnit := TimeToLiveUnitNanoseconds
511-
ttl.ColumnUnit = &columnUnit
489+
func (ttl TimeToLiveSettings) ExpireAfter(expireAfter time.Duration) TimeToLiveSettings {
490+
ttl.ExpireAfterSeconds = uint32(expireAfter.Seconds())
512491
return ttl
513492
}
514493

@@ -539,29 +518,6 @@ func (ttl *TimeToLiveSettings) ToYDB() *Ydb_Table.TtlSettings {
539518
}
540519
}
541520

542-
func NewTimeToLiveSettings(settings *Ydb_Table.TtlSettings) *TimeToLiveSettings {
543-
if settings == nil {
544-
return nil
545-
}
546-
switch mode := settings.Mode.(type) {
547-
case *Ydb_Table.TtlSettings_DateTypeColumn:
548-
return &TimeToLiveSettings{
549-
ColumnName: mode.DateTypeColumn.ColumnName,
550-
ExpireAfterSeconds: mode.DateTypeColumn.ExpireAfterSeconds,
551-
Mode: TimeToLiveModeDateType,
552-
}
553-
554-
case *Ydb_Table.TtlSettings_ValueSinceUnixEpoch:
555-
return &TimeToLiveSettings{
556-
ColumnName: mode.ValueSinceUnixEpoch.ColumnName,
557-
ColumnUnit: timeToLiveUnit(mode.ValueSinceUnixEpoch.ColumnUnit),
558-
ExpireAfterSeconds: mode.ValueSinceUnixEpoch.ExpireAfterSeconds,
559-
Mode: TimeToLiveModeValueSinceUnixEpoch,
560-
}
561-
}
562-
return nil
563-
}
564-
565521
type TimeToLiveUnit int32
566522

567523
const (
@@ -592,25 +548,6 @@ func (unit *TimeToLiveUnit) ToYDB() Ydb_Table.ValueSinceUnixEpochModeSettings_Un
592548
}
593549
}
594550

595-
func timeToLiveUnit(unit Ydb_Table.ValueSinceUnixEpochModeSettings_Unit) *TimeToLiveUnit {
596-
var res TimeToLiveUnit
597-
switch unit {
598-
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_SECONDS:
599-
res = TimeToLiveUnitSeconds
600-
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_MILLISECONDS:
601-
res = TimeToLiveUnitMilliseconds
602-
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_MICROSECONDS:
603-
res = TimeToLiveUnitMicroseconds
604-
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_NANOSECONDS:
605-
res = TimeToLiveUnitNanoseconds
606-
case Ydb_Table.ValueSinceUnixEpochModeSettings_UNIT_UNSPECIFIED:
607-
res = TimeToLiveUnitUnspecified
608-
default:
609-
panic("ydb: unknown Ydb unit for value since epoch")
610-
}
611-
return &res
612-
}
613-
614551
type ChangefeedDescription struct {
615552
Name string
616553
Mode ChangefeedMode

table/options/models_test.go

Lines changed: 14 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,8 @@ func TestTimeToLiveSettingsFluentModifiers(t *testing.T) {
1313
expectedSettings TimeToLiveSettings
1414
}{
1515
{
16-
fluentSettings: TimeToLiveSettings{}.
17-
WithColumnName("a").
18-
WithColumnUnit(TimeToLiveUnitSeconds).
19-
WithMode(TimeToLiveModeValueSinceUnixEpoch).
20-
ExpireAfter(time.Hour),
21-
expectedSettings: TimeToLiveSettings{
22-
ColumnName: "a",
23-
Mode: TimeToLiveModeValueSinceUnixEpoch,
24-
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
25-
ColumnUnit: func() *TimeToLiveUnit {
26-
u := TimeToLiveUnitSeconds
27-
return &u
28-
}(),
29-
},
30-
},
31-
{
32-
fluentSettings: TimeToLiveSettings{}.
33-
WithColumnName("a").
34-
ModeDate().
16+
fluentSettings: NewTTLSettings().
17+
ColumnDateType("a").
3518
ExpireAfter(time.Hour),
3619
expectedSettings: TimeToLiveSettings{
3720
ColumnName: "a",
@@ -40,79 +23,47 @@ func TestTimeToLiveSettingsFluentModifiers(t *testing.T) {
4023
},
4124
},
4225
{
43-
fluentSettings: TimeToLiveSettings{}.
44-
WithColumnName("a").
45-
ModeSinceEpoch().
46-
ColumnUnitSeconds().
47-
ExpireAfter(time.Hour),
48-
expectedSettings: TimeToLiveSettings{
49-
ColumnName: "a",
50-
Mode: TimeToLiveModeValueSinceUnixEpoch,
51-
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
52-
ColumnUnit: func() *TimeToLiveUnit {
53-
u := TimeToLiveUnitSeconds
54-
return &u
55-
}(),
56-
},
57-
},
58-
{
59-
fluentSettings: TimeToLiveSettings{}.
60-
WithColumnName("a").
61-
ColumnUnitSeconds().
26+
fluentSettings: NewTTLSettings().
27+
ColumnSeconds("a").
6228
ExpireAfter(time.Hour),
6329
expectedSettings: TimeToLiveSettings{
6430
ColumnName: "a",
6531
Mode: TimeToLiveModeValueSinceUnixEpoch,
6632
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
67-
ColumnUnit: func() *TimeToLiveUnit {
68-
u := TimeToLiveUnitSeconds
69-
return &u
70-
}(),
33+
ColumnUnit: unitToPointer(TimeToLiveUnitSeconds),
7134
},
7235
},
7336
{
74-
fluentSettings: TimeToLiveSettings{}.
75-
WithColumnName("a").
76-
ColumnUnitMilliseconds().
37+
fluentSettings: NewTTLSettings().
38+
ColumnMilliseconds("a").
7739
ExpireAfter(time.Hour),
7840
expectedSettings: TimeToLiveSettings{
7941
ColumnName: "a",
8042
Mode: TimeToLiveModeValueSinceUnixEpoch,
8143
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
82-
ColumnUnit: func() *TimeToLiveUnit {
83-
u := TimeToLiveUnitMilliseconds
84-
return &u
85-
}(),
44+
ColumnUnit: unitToPointer(TimeToLiveUnitMilliseconds),
8645
},
8746
},
8847
{
89-
fluentSettings: TimeToLiveSettings{}.
90-
WithColumnName("a").
91-
ColumnUnitMicroseconds().
48+
fluentSettings: NewTTLSettings().
49+
ColumnMicroseconds("a").
9250
ExpireAfter(time.Hour),
9351
expectedSettings: TimeToLiveSettings{
9452
ColumnName: "a",
9553
Mode: TimeToLiveModeValueSinceUnixEpoch,
9654
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
97-
ColumnUnit: func() *TimeToLiveUnit {
98-
u := TimeToLiveUnitMicroseconds
99-
return &u
100-
}(),
55+
ColumnUnit: unitToPointer(TimeToLiveUnitMicroseconds),
10156
},
10257
},
10358
{
104-
fluentSettings: TimeToLiveSettings{}.
105-
WithColumnName("a").
106-
ColumnUnitNanoseconds().
59+
fluentSettings: NewTTLSettings().
60+
ColumnNanoseconds("a").
10761
ExpireAfter(time.Hour),
10862
expectedSettings: TimeToLiveSettings{
10963
ColumnName: "a",
11064
Mode: TimeToLiveModeValueSinceUnixEpoch,
11165
ExpireAfterSeconds: uint32(time.Hour.Seconds()),
112-
ColumnUnit: func() *TimeToLiveUnit {
113-
u := TimeToLiveUnitNanoseconds
114-
return &u
115-
}(),
66+
ColumnUnit: unitToPointer(TimeToLiveUnitNanoseconds),
11667
},
11768
},
11869
} {

0 commit comments

Comments
 (0)