From 1b00affd823f529cc65ab39dd86a2532458b0018 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 20 Jul 2024 22:39:16 +0800 Subject: [PATCH] 1 --- dbpool.go | 38 ++++++++++++++++++++++++++++++++++++++ sysutils.go | 3 ++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/dbpool.go b/dbpool.go index 5205ef6..e189b77 100644 --- a/dbpool.go +++ b/dbpool.go @@ -134,6 +134,44 @@ func (this *dbPool) SyncBatchLoadFullTable(dataSource string, sqlTpl string, return lastIdx } +func (this *dbPool) BatchLoadFullTable( + dataSource string, + sqlCb func(int64) string, + params []string, + nextTimeCb func() int64, + doCb func(*DataSet) bool) error { + if this.style != GO_STYLE_DB { + panic("dbpool.BatchLoadFullTable is not gostyle") + } + var resultErr error + var lastIdx int64 + done := false + for !done && resultErr == nil { + this.SyncSelectCustomQuery( + dataSource, + sqlCb(lastIdx), + func (err error, ds *DataSet) { + if err != nil { + resultErr = err + return + } + for ds.Next() { + idx := q5.ToInt64(ds.GetByName("idx")) + doCb(ds) + if idx > lastIdx { + lastIdx = idx + } else { + panic(fmt.Sprintf("BatchLoadFullTable idx error:%s %s", idx, lastIdx)) + } + } + if ds.NumOfReaded() <= 0 { + done = true + } + }) + } + return resultErr +} + func (this *dbPool) LoopLoad( dataSource string, name string, diff --git a/sysutils.go b/sysutils.go index 5d69c65..cad087b 100644 --- a/sysutils.go +++ b/sysutils.go @@ -133,8 +133,9 @@ func DataSetStreamPageQuery(dataSet []interface{}, var dataSetCopy []*interface{} q5.NewSlice(&dataSetCopy, 0, int32(len(dataSet))) for _, val := range dataSet { + tmpVal := val if filterCb(val) { - q5.AppendSlice(&dataSetCopy, &val) + q5.AppendSlice(&dataSetCopy, &tmpVal) } } q5.Sort(dataSetCopy, func(a *interface{}, b *interface{}) bool {