@@ -319,95 +319,100 @@ func (c *conn) queryContext(ctx context.Context, query string, args []driver.Nam
319319 }
320320
321321 var (
322- m = queryModeFromContext (ctx , c .defaultQueryMode )
323- onDone = trace .DatabaseSQLOnConnQuery (
322+ queryMode = queryModeFromContext (ctx , c .defaultQueryMode )
323+ onDone = trace .DatabaseSQLOnConnQuery (
324324 c .trace , & ctx ,
325325 stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/xsql.(*conn).queryContext" ),
326- query , m .String (), xcontext .IsIdempotent (ctx ), c .sinceLastUsage (),
326+ query , queryMode .String (), xcontext .IsIdempotent (ctx ), c .sinceLastUsage (),
327327 )
328328 )
329329 defer func () {
330330 onDone (finalErr )
331331 }()
332332
333- switch m {
334- case DataQueryMode :
335- normalizedQuery , parameters , err := c .normalize (query , args ... )
336- if err != nil {
337- return nil , xerrors .WithStackTrace (err )
338- }
339- _ , res , err := c .session .Execute (ctx ,
340- txControl (ctx , c .defaultTxControl ),
341- normalizedQuery , & parameters , c .dataQueryOptions (ctx )... ,
342- )
343- if err != nil {
344- return nil , badconn .Map (xerrors .WithStackTrace (err ))
345- }
346- if err = res .Err (); err != nil {
347- return nil , badconn .Map (xerrors .WithStackTrace (err ))
348- }
333+ normalizedQuery , parameters , err := c .normalize (query , args ... )
334+ if err != nil {
335+ return nil , xerrors .WithStackTrace (err )
336+ }
349337
350- return & rows {
351- conn : c ,
352- result : res ,
353- }, nil
338+ switch queryMode {
339+ case DataQueryMode :
340+ return c .execDataQuery (ctx , normalizedQuery , parameters )
354341 case ScanQueryMode :
355- normalizedQuery , parameters , err := c .normalize (query , args ... )
356- if err != nil {
357- return nil , xerrors .WithStackTrace (err )
358- }
359- res , err := c .session .StreamExecuteScanQuery (ctx ,
360- normalizedQuery , & parameters , c .scanQueryOptions (ctx )... ,
361- )
362- if err != nil {
363- return nil , badconn .Map (xerrors .WithStackTrace (err ))
364- }
365- if err = res .Err (); err != nil {
366- return nil , badconn .Map (xerrors .WithStackTrace (err ))
367- }
368-
369- return & rows {
370- conn : c ,
371- result : res ,
372- }, nil
342+ return c .execScanQuery (ctx , normalizedQuery , parameters )
373343 case ExplainQueryMode :
374- normalizedQuery , _ , err := c .normalize (query , args ... )
375- if err != nil {
376- return nil , xerrors .WithStackTrace (err )
377- }
378- exp , err := c .session .Explain (ctx , normalizedQuery )
379- if err != nil {
380- return nil , badconn .Map (xerrors .WithStackTrace (err ))
381- }
382-
383- return & single {
384- values : []sql.NamedArg {
385- sql .Named ("AST" , exp .AST ),
386- sql .Named ("Plan" , exp .Plan ),
387- },
388- }, nil
344+ return c .explainQuery (ctx , normalizedQuery )
389345 case ScriptingQueryMode :
390- normalizedQuery , parameters , err := c .normalize (query , args ... )
391- if err != nil {
392- return nil , xerrors .WithStackTrace (err )
393- }
394- res , err := c .connector .parent .Scripting ().StreamExecute (ctx , normalizedQuery , & parameters )
395- if err != nil {
396- return nil , badconn .Map (xerrors .WithStackTrace (err ))
397- }
398- if err = res .Err (); err != nil {
399- return nil , badconn .Map (xerrors .WithStackTrace (err ))
400- }
401-
402- return & rows {
403- conn : c ,
404- result : res ,
405- }, nil
346+ return c .execScriptingQuery (ctx , normalizedQuery , parameters )
406347 default :
407- return nil , fmt .Errorf ("unsupported query mode '%s' on conn query" , m )
348+ return nil , fmt .Errorf ("unsupported query mode '%s' on conn query" , queryMode )
408349 }
409350}
410351
352+ func (c * conn ) execDataQuery (ctx context.Context , query string , params params.Parameters ) (driver.Rows , error ) {
353+ _ , res , err := c .session .Execute (ctx ,
354+ txControl (ctx , c .defaultTxControl ),
355+ query , & params , c .dataQueryOptions (ctx )... ,
356+ )
357+ if err != nil {
358+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
359+ }
360+ if err = res .Err (); err != nil {
361+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
362+ }
363+
364+ return & rows {
365+ conn : c ,
366+ result : res ,
367+ }, nil
368+ }
369+
370+ func (c * conn ) execScanQuery (ctx context.Context , query string , params params.Parameters ) (driver.Rows , error ) {
371+ res , err := c .session .StreamExecuteScanQuery (ctx ,
372+ query , & params , c .scanQueryOptions (ctx )... ,
373+ )
374+ if err != nil {
375+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
376+ }
377+ if err = res .Err (); err != nil {
378+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
379+ }
380+
381+ return & rows {
382+ conn : c ,
383+ result : res ,
384+ }, nil
385+ }
386+
387+ func (c * conn ) explainQuery (ctx context.Context , query string ) (driver.Rows , error ) {
388+ exp , err := c .session .Explain (ctx , query )
389+ if err != nil {
390+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
391+ }
392+
393+ return & single {
394+ values : []sql.NamedArg {
395+ sql .Named ("AST" , exp .AST ),
396+ sql .Named ("Plan" , exp .Plan ),
397+ },
398+ }, nil
399+ }
400+
401+ func (c * conn ) execScriptingQuery (ctx context.Context , query string , params params.Parameters ) (driver.Rows , error ) {
402+ res , err := c .connector .parent .Scripting ().StreamExecute (ctx , query , & params )
403+ if err != nil {
404+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
405+ }
406+ if err = res .Err (); err != nil {
407+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
408+ }
409+
410+ return & rows {
411+ conn : c ,
412+ result : res ,
413+ }, nil
414+ }
415+
411416func (c * conn ) Ping (ctx context.Context ) (finalErr error ) {
412417 onDone := trace .DatabaseSQLOnConnPing (c .trace , & ctx ,
413418 stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/xsql.(*conn).Ping" ),
0 commit comments