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  }