github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/journal/impl.go (about) 1 /* 2 * Copyright (c) 2023-present unTill Pro, Ltd. 3 */ 4 5 package journal 6 7 import ( 8 "time" 9 10 "github.com/voedger/voedger/pkg/appdef" 11 "github.com/voedger/voedger/pkg/istructs" 12 "github.com/voedger/voedger/pkg/state" 13 ) 14 15 func FindOffsetsByTimeRange(from, till time.Time, idx appdef.QName, s istructs.IState) (fo, lo int64, err error) { 16 for y := from.Year(); y <= till.Year(); y++ { 17 kb, err := s.KeyBuilder(state.View, idx) 18 if err != nil { 19 return 0, 0, err 20 } 21 kb.PutInt32(field_Year, int32(y)) 22 err = s.Read(kb, func(key istructs.IKey, value istructs.IStateValue) (err error) { 23 yearDay := int(key.AsInt32(field_DayOfYear)) 24 if fo == int64(0) && (y > from.Year() || (y == from.Year() && yearDay >= from.YearDay())) { 25 fo = value.AsInt64(field_FirstOffset) 26 } 27 if y < till.Year() || (y == till.Year() && yearDay <= till.YearDay()) { 28 lo = value.AsInt64(field_LastOffset) 29 } 30 return 31 }) 32 if err != nil { 33 return 0, 0, err 34 } 35 } 36 return 37 }