github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/sqlquery/impl_plog.go (about)

     1  /*
     2   * Copyright (c) 2022-present unTill Pro, Ltd.
     3   */
     4  
     5  package sqlquery
     6  
     7  import (
     8  	"context"
     9  	"encoding/json"
    10  	"fmt"
    11  
    12  	"github.com/voedger/voedger/pkg/appdef"
    13  	"github.com/voedger/voedger/pkg/appparts"
    14  	"github.com/voedger/voedger/pkg/istructs"
    15  )
    16  
    17  func readPlog(ctx context.Context, wsid istructs.WSID, offset istructs.Offset, count int,
    18  	appStructs istructs.IAppStructs, f *filter, callback istructs.ExecQueryCallback, appDef appdef.IAppDef, appParts appparts.IAppPartitions) error {
    19  	if !f.acceptAll {
    20  		for field := range f.fields {
    21  			if !plogDef[field] {
    22  				return fmt.Errorf("field '%s' not found in def", field)
    23  			}
    24  		}
    25  	}
    26  	partitionID, err := appParts.AppWorkspacePartitionID(appStructs.AppQName(), wsid)
    27  	if err != nil {
    28  		return err
    29  	}
    30  	return appStructs.Events().ReadPLog(ctx, partitionID, offset, count, func(plogOffset istructs.Offset, event istructs.IPLogEvent) (err error) {
    31  		data := make(map[string]interface{})
    32  		if f.filter("PlogOffset") {
    33  			data["PlogOffset"] = plogOffset
    34  		}
    35  		if f.filter("Workspace") {
    36  			data["Workspace"] = event.Workspace()
    37  		}
    38  		if f.filter("WLogOffset") {
    39  			data["WLogOffset"] = event.WLogOffset()
    40  		}
    41  
    42  		renderDbEvent(data, f, event, appDef, event.WLogOffset())
    43  
    44  		bb, err := json.Marshal(data)
    45  		if err != nil {
    46  			return err
    47  		}
    48  
    49  		return callback(&result{value: string(bb)})
    50  	})
    51  }