@@ -2,7 +2,6 @@ package table
22
33import (
44 "context"
5- "io"
65 "net/url"
76 "strconv"
87 "sync"
@@ -14,6 +13,7 @@ import (
1413 "github.com/ydb-platform/ydb-go-genproto/Ydb_Table_V1"
1514 "github.com/ydb-platform/ydb-go-genproto/protos/Ydb"
1615 "github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Table"
16+ "github.com/ydb-platform/ydb-go-genproto/protos/Ydb_TableStats"
1717
1818 "github.com/ydb-platform/ydb-go-sdk/v3/internal/cluster"
1919 "github.com/ydb-platform/ydb-go-sdk/v3/internal/errors"
@@ -700,43 +700,34 @@ func (s *session) StreamReadTable(
700700 onDone := trace .TableOnSessionQueryStreamRead (s .trace , & ctx , s )
701701 if err != nil {
702702 cancel ()
703- onDone (nil , err )
703+ onDone (err )
704704 return nil , err
705705 }
706706
707- r := scanner .NewStream ()
708- go func () {
709- var (
710- response * Ydb_Table.ReadTableResponse
711- err error
712- )
713- defer func () {
714- cancel ()
715- onDone (r , errors .HideEOF (err ))
716- r .Close ()
717- }()
718- for {
707+ return scanner .NewStream (
708+ func (ctx context.Context ) (
709+ set * Ydb.ResultSet ,
710+ stats * Ydb_TableStats.QueryStats ,
711+ err error ,
712+ ) {
719713 select {
720714 case <- ctx .Done ():
721- err = ctx .Err ()
722- r .SetErr (err )
723- return
715+ return nil , nil , ctx .Err ()
724716 default :
725- if response , err = stream .Recv (); err != nil {
726- if ! errors .Is (err , io .EOF ) {
727- r .SetErr (err )
728- }
729- return
730- }
731- if result := response .GetResult (); result != nil {
732- if resultSet := result .GetResultSet (); resultSet != nil {
733- r .Append (resultSet )
734- }
717+ response , err := stream .Recv ()
718+ result := response .GetResult ()
719+ if result == nil || err != nil {
720+ return nil , nil , err
735721 }
722+ return result .GetResultSet (), nil , nil
736723 }
737- }
738- }()
739- return r , nil
724+ },
725+ func (err error ) error {
726+ cancel ()
727+ onDone (err )
728+ return err
729+ },
730+ ), nil
740731}
741732
742733// StreamExecuteScanQuery scan-reads table at given path with given options.
@@ -771,47 +762,34 @@ func (s *session) StreamExecuteScanQuery(
771762 onDone := trace .TableOnSessionQueryStreamExecute (s .trace , & ctx , s , q , params )
772763 if err != nil {
773764 cancel ()
774- onDone (nil , err )
765+ onDone (err )
775766 return nil , err
776767 }
777768
778- r := scanner .NewStream ()
779- go func () {
780- var (
781- response * Ydb_Table.ExecuteScanQueryPartialResponse
782- err error
783- )
784- defer func () {
785- cancel ()
786- onDone (r , errors .HideEOF (err ))
787- r .Close ()
788- }()
789- for {
769+ return scanner .NewStream (
770+ func (ctx context.Context ) (
771+ set * Ydb.ResultSet ,
772+ stats * Ydb_TableStats.QueryStats ,
773+ err error ,
774+ ) {
790775 select {
791776 case <- ctx .Done ():
792- err = ctx .Err ()
793- r .SetErr (err )
794- return
777+ return nil , nil , ctx .Err ()
795778 default :
796- if response , err = stream .Recv (); err != nil {
797- if ! errors .Is (err , io .EOF ) {
798- r .SetErr (err )
799- err = nil
800- }
801- return
802- }
803- if result := response .GetResult (); result != nil {
804- if resultSet := result .GetResultSet (); resultSet != nil {
805- r .Append (resultSet )
806- }
807- if stats := result .GetQueryStats (); stats != nil {
808- r .UpdateStats (stats )
809- }
779+ response , err := stream .Recv ()
780+ result := response .GetResult ()
781+ if result == nil || err != nil {
782+ return nil , nil , err
810783 }
784+ return result .GetResultSet (), result .GetQueryStats (), nil
811785 }
812- }
813- }()
814- return r , nil
786+ },
787+ func (err error ) error {
788+ cancel ()
789+ onDone (err )
790+ return err
791+ },
792+ ), nil
815793}
816794
817795// BulkUpsert uploads given list of ydb struct values to the table.
0 commit comments