@@ -72,7 +72,7 @@ func (c *Client) execute(
7272) (r result.Result , err error ) {
7373 var (
7474 onDone = trace .ScriptingOnExecute (c .config .Trace (), & ctx ,
75- stack .FunctionID ("" ),
75+ stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/scripting.(*Client).execute " ),
7676 query , parameters ,
7777 )
7878 a = allocator .New ()
@@ -151,7 +151,7 @@ func (c *Client) explain(
151151) (e table.ScriptingYQLExplanation , err error ) {
152152 var (
153153 onDone = trace .ScriptingOnExplain (c .config .Trace (), & ctx ,
154- stack .FunctionID ("" ),
154+ stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/scripting.(*Client).explain " ),
155155 query ,
156156 )
157157 request = & Ydb_Scripting.ExplainYqlRequest {
@@ -218,53 +218,26 @@ func (c *Client) StreamExecute(
218218 return r , xerrors .WithStackTrace (err )
219219}
220220
221- func newReceiveStreamResultFunc (
222- stream Ydb_Scripting_V1.ScriptingService_StreamExecuteYqlClient ,
223- traceErr func (error ) func (error ),
224- ) func (ctx context.Context ) (* Ydb.ResultSet , * Ydb_TableStats.QueryStats , error ) {
225- return func (ctx context.Context ) (* Ydb.ResultSet , * Ydb_TableStats.QueryStats , error ) {
226- defer func () {
227- err := recover ()
228- if err != nil {
229- errError := err .(error )
230- traceErr (xerrors .HideEOF (errError ))
231- }
232- }()
233- select {
234- case <- ctx .Done ():
235- return nil , nil , xerrors .WithStackTrace (ctx .Err ())
236- default :
237- var response * Ydb_Scripting.ExecuteYqlPartialResponse
238- response , err := stream .Recv ()
239- if err != nil {
240- return nil , nil , xerrors .WithStackTrace (err )
241- }
242-
243- result := response .GetResult ()
244- if result == nil {
245- return nil , nil , xerrors .WithStackTrace (errors .New ("no result set" ))
246- }
247-
248- return result .GetResultSet (), result .GetQueryStats (), nil
249- }
250- }
251- }
252-
253221func (c * Client ) streamExecute (
254222 ctx context.Context ,
255223 query string ,
256224 parameters * params.Parameters ,
257- ) (r scanner .StreamResult , err error ) {
225+ ) (r result .StreamResult , err error ) {
258226 var (
259- onIntermediate = trace .ScriptingOnStreamExecute (c .config .Trace (), & ctx , stack .FunctionID ("" ), query , parameters )
260- a = allocator .New ()
261- request = & Ydb_Scripting.ExecuteYqlRequest {
227+ onIntermediate = trace .ScriptingOnStreamExecute (c .config .Trace (), & ctx ,
228+ stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/scripting.(*Client).streamExecute" ),
229+ query , parameters ,
230+ )
231+ a = allocator .New ()
232+ request = & Ydb_Scripting.ExecuteYqlRequest {
262233 Script : query ,
263234 Parameters : parameters .ToYDB (a ),
264235 OperationParams : operation .Params (
265- ctx , c .config .OperationTimeout (),
236+ ctx ,
237+ c .config .OperationTimeout (),
266238 c .config .OperationCancelAfter (),
267- operation .ModeSync ),
239+ operation .ModeSync ,
240+ ),
268241 }
269242 )
270243 defer func () {
@@ -275,33 +248,53 @@ func (c *Client) streamExecute(
275248 }()
276249
277250 ctx , cancel := xcontext .WithCancel (ctx )
278- defer cancel ()
279251
280252 stream , err := c .service .StreamExecuteYql (ctx , request )
281253 if err != nil {
282- return nil , xerrors .WithStackTrace (err )
283- }
284-
285- recvFunc := newReceiveStreamResultFunc (stream , onIntermediate )
286- onCloseFunc := func (err error ) error {
287- onIntermediate (xerrors .HideEOF (err ))(xerrors .HideEOF (err ))
288-
289- return err
290- }
254+ cancel ()
291255
292- result , err := scanner .NewStream (ctx , recvFunc , onCloseFunc )
293- if err != nil {
294256 return nil , xerrors .WithStackTrace (err )
295257 }
296258
297- return result , nil
259+ return scanner .NewStream (ctx ,
260+ func (ctx context.Context ) (
261+ set * Ydb.ResultSet ,
262+ stats * Ydb_TableStats.QueryStats ,
263+ err error ,
264+ ) {
265+ defer func () {
266+ onIntermediate (xerrors .HideEOF (err ))
267+ }()
268+ select {
269+ case <- ctx .Done ():
270+ return nil , nil , xerrors .WithStackTrace (ctx .Err ())
271+ default :
272+ var response * Ydb_Scripting.ExecuteYqlPartialResponse
273+ response , err = stream .Recv ()
274+ result := response .GetResult ()
275+ if result == nil || err != nil {
276+ return nil , nil , xerrors .WithStackTrace (err )
277+ }
278+
279+ return result .GetResultSet (), result .GetQueryStats (), nil
280+ }
281+ },
282+ func (err error ) error {
283+ cancel ()
284+ onIntermediate (xerrors .HideEOF (err ))(xerrors .HideEOF (err ))
285+
286+ return err
287+ },
288+ )
298289}
299290
300291func (c * Client ) Close (ctx context.Context ) (err error ) {
301292 if c == nil {
302293 return xerrors .WithStackTrace (errNilClient )
303294 }
304- onDone := trace .ScriptingOnClose (c .config .Trace (), & ctx , stack .FunctionID ("" ))
295+ onDone := trace .ScriptingOnClose (c .config .Trace (), & ctx ,
296+ stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/scripting.(*Client).Close" ),
297+ )
305298 defer func () {
306299 onDone (err )
307300 }()
0 commit comments