This is an automated email from the ASF dual-hosted git repository.

JackieTien97 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iotdb-client-go.git


The following commit(s) were added to refs/heads/main by this push:
     new e59fc7f  Fix IoTDBRpcDataSet.moreData not updated in fetchResults 
(#171)
e59fc7f is described below

commit e59fc7f55df115dcc932670a56939a68b1eba985
Author: shuwenwei <[email protected]>
AuthorDate: Fri Aug 7 15:45:54 2026 +0800

    Fix IoTDBRpcDataSet.moreData not updated in fetchResults (#171)
---
 client/rpcdataset.go |  2 ++
 test/e2e/e2e_test.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)

diff --git a/client/rpcdataset.go b/client/rpcdataset.go
index da97ef6..d41a765 100644
--- a/client/rpcdataset.go
+++ b/client/rpcdataset.go
@@ -234,6 +234,8 @@ func (s *IoTDBRpcDataSet) fetchResults() (bool, error) {
                return false, err
        }
 
+       s.moreData = resp.GetMoreData()
+
        if !resp.HasResultSet {
                err = s.Close()
        } else {
diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go
index 8fd2167..aef1dbd 100644
--- a/test/e2e/e2e_test.go
+++ b/test/e2e/e2e_test.go
@@ -436,6 +436,73 @@ func (s *e2eTestSuite) Test_FetchMoreData() {
        s.session.DeleteStorageGroup("root.ln.**")
 }
 
+// createSimpleTablet creates a tablet whose single INT64 measurement value
+// equals the row index, so that the values read back can be verified.
+func createSimpleTablet(deviceId string, rowCount int) (*client.Tablet, error) 
{
+       tablet, err := client.NewTablet(deviceId, []*client.MeasurementSchema{
+               {
+                       Measurement: "value",
+                       DataType:    client.INT64,
+               },
+       }, rowCount)
+       if err != nil {
+               return nil, err
+       }
+       var ts int64 = 0
+       for row := 0; row < rowCount; row++ {
+               ts++
+               tablet.SetTimestamp(ts, row)
+               tablet.SetValueAt(int64(row), 0, row)
+               tablet.RowSize++
+       }
+       return tablet, nil
+}
+
+// Test_QueryDataAcrossMultipleFetches writes more rows than the fetch size so
+// that reading the result requires several fetchResults rounds; the data set
+// must keep fetching while the server reports more data and stop once the
+// server reports no more data, otherwise the read-back count and values would
+// not match.
+func (s *e2eTestSuite) Test_QueryDataAcrossMultipleFetches() {
+       var timeseries = []string{"root.ln.device1.**"}
+       tests := []struct {
+               name      string
+               fetchSize int32
+               rowCount  int
+       }{
+               {name: "30000 rows with fetchSize 100", fetchSize: 100, 
rowCount: 30000},
+               {name: "50000 rows with fetchSize 1000", fetchSize: 1000, 
rowCount: 50000},
+       }
+       for _, tt := range tests {
+               s.Run(tt.name, func() {
+                       s.session.SetFetchSize(tt.fetchSize)
+                       s.session.DeleteTimeseries(timeseries)
+                       tablet, err := createSimpleTablet("root.ln.device1", 
tt.rowCount)
+                       s.Require().NoError(err)
+                       
s.checkError(s.session.InsertAlignedTablets([]*client.Tablet{tablet}, false))
+
+                       ds, err := s.session.ExecuteQueryStatement("select * 
from root.ln.device1", nil)
+                       s.Require().NoError(err)
+                       defer ds.Close()
+
+                       count := 0
+                       for {
+                               hasNext, err := ds.Next()
+                               s.Require().NoError(err)
+                               if !hasNext {
+                                       break
+                               }
+                               value, err := 
ds.GetLong("root.ln.device1.value")
+                               s.Require().NoError(err)
+                               s.Assert().Equal(int64(count), value)
+                               count++
+                       }
+                       s.Assert().Equal(tt.rowCount, count)
+                       s.session.DeleteStorageGroup("root.ln.**")
+               })
+       }
+}
+
 func (s *e2eTestSuite) Test_QueryAllDataType() {
        measurementSchemas := []*client.MeasurementSchema{
                {

Reply via email to