@@ -72,7 +72,7 @@ func (c *Client) execute(
72
72
) (r result.Result , err error ) {
73
73
var (
74
74
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 " ),
76
76
query , parameters ,
77
77
)
78
78
a = allocator .New ()
@@ -151,7 +151,7 @@ func (c *Client) explain(
151
151
) (e table.ScriptingYQLExplanation , err error ) {
152
152
var (
153
153
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 " ),
155
155
query ,
156
156
)
157
157
request = & Ydb_Scripting.ExplainYqlRequest {
@@ -218,53 +218,26 @@ func (c *Client) StreamExecute(
218
218
return r , xerrors .WithStackTrace (err )
219
219
}
220
220
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
-
253
221
func (c * Client ) streamExecute (
254
222
ctx context.Context ,
255
223
query string ,
256
224
parameters * params.Parameters ,
257
- ) (r scanner .StreamResult , err error ) {
225
+ ) (r result .StreamResult , err error ) {
258
226
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 {
262
233
Script : query ,
263
234
Parameters : parameters .ToYDB (a ),
264
235
OperationParams : operation .Params (
265
- ctx , c .config .OperationTimeout (),
236
+ ctx ,
237
+ c .config .OperationTimeout (),
266
238
c .config .OperationCancelAfter (),
267
- operation .ModeSync ),
239
+ operation .ModeSync ,
240
+ ),
268
241
}
269
242
)
270
243
defer func () {
@@ -275,33 +248,53 @@ func (c *Client) streamExecute(
275
248
}()
276
249
277
250
ctx , cancel := xcontext .WithCancel (ctx )
278
- defer cancel ()
279
251
280
252
stream , err := c .service .StreamExecuteYql (ctx , request )
281
253
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 ()
291
255
292
- result , err := scanner .NewStream (ctx , recvFunc , onCloseFunc )
293
- if err != nil {
294
256
return nil , xerrors .WithStackTrace (err )
295
257
}
296
258
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
+ )
298
289
}
299
290
300
291
func (c * Client ) Close (ctx context.Context ) (err error ) {
301
292
if c == nil {
302
293
return xerrors .WithStackTrace (errNilClient )
303
294
}
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
+ )
305
298
defer func () {
306
299
onDone (err )
307
300
}()
0 commit comments