Iterator defined by data-source now only requires one method: next()

This commit is contained in:
2024-07-21 05:45:22 +02:00
parent 6ecbe2feb1
commit c461fd138e
3 changed files with 62 additions and 69 deletions
+14 -10
View File
@@ -66,8 +66,8 @@ func evalFirstChild(ctx ExprContext, iteratorTerm *term) (value any, err error)
func getDataSourceDict(iteratorTerm *term, firstChildValue any) (ds map[string]Functor, err error) {
if dictAny, ok := firstChildValue.(*DictType); ok {
requiredFields := []string{CurrentName, NextName}
fieldsMask := 0b11
requiredFields := []string{/*CurrentName,*/ NextName}
fieldsMask := 0b1
foundFields := 0
ds = make(map[string]Functor)
for keyAny, item := range *dictAny {
@@ -108,9 +108,10 @@ func evalIterator(ctx ExprContext, opTerm *term) (v any, err error) {
}
if ds != nil {
dc := NewDataCursor(ctx, ds)
var dc *dataCursor
if initFunc, exists := ds[InitName]; exists && initFunc != nil {
var args []any
var resource any
if len(opTerm.children) > 1 {
if args, err = evalTermArray(ctx, opTerm.children[1:]); err != nil {
return
@@ -119,17 +120,20 @@ func evalIterator(ctx ExprContext, opTerm *term) (v any, err error) {
args = []any{}
}
initCtx := dc.ctx.Clone()
if dc.resource, err = initFunc.Invoke(initCtx, InitName, args); err != nil {
initCtx := ctx.Clone()
if resource, err = initFunc.Invoke(initCtx, InitName, args); err != nil {
return
}
exportObjects(dc.ctx, initCtx)
dcCtx := ctx.Clone()
exportObjects(dcCtx, initCtx)
dc = NewDataCursor(dcCtx, ds, resource)
//exportObjects(dc.ctx, initCtx)
}
dc.nextFunc = ds[NextName]
dc.currentFunc = ds[CurrentName]
dc.cleanFunc = ds[CleanName]
dc.resetFunc = ds[ResetName]
// dc.nextFunc = ds[NextName]
// dc.currentFunc = ds[CurrentName]
// dc.cleanFunc = ds[CleanName]
// dc.resetFunc = ds[ResetName]
v = dc
} else if list, ok := firstChildValue.(*ListType); ok {