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 }