@@ -21,7 +21,6 @@ import (
2121 "github.com/ydb-platform/ydb-go-sdk/v3/scheme"
2222 "github.com/ydb-platform/ydb-go-sdk/v3/table"
2323 "github.com/ydb-platform/ydb-go-sdk/v3/table/options"
24- "github.com/ydb-platform/ydb-go-sdk/v3/table/result"
2524 "github.com/ydb-platform/ydb-go-sdk/v3/trace"
2625)
2726
@@ -179,9 +178,11 @@ func (c *conn) sinceLastUsage() time.Duration {
179178 return time .Since (time .Unix (c .lastUsage .Load (), 0 ))
180179}
181180
182- func (c * conn ) execContext (ctx context.Context , query string , args []driver.NamedValue ) (
183- _ driver.Result , finalErr error ,
184- ) {
181+ func (c * conn ) execContext (
182+ ctx context.Context ,
183+ query string ,
184+ args []driver.NamedValue ,
185+ ) (_ driver.Result , finalErr error ) {
185186 defer func () {
186187 c .lastUsage .Store (time .Now ().Unix ())
187188 }()
@@ -194,79 +195,92 @@ func (c *conn) execContext(ctx context.Context, query string, args []driver.Name
194195 return c .currentTx .ExecContext (ctx , query , args )
195196 }
196197
197- var (
198- m = queryModeFromContext (ctx , c .defaultQueryMode )
199- onDone = trace .DatabaseSQLOnConnExec (
200- c .trace , & ctx ,
201- stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/xsql.(*conn).execContext" ),
202- query , m .String (), xcontext .IsIdempotent (ctx ), c .sinceLastUsage (),
203- )
198+ m := queryModeFromContext (ctx , c .defaultQueryMode )
199+ onDone := trace .DatabaseSQLOnConnExec (
200+ c .trace , & ctx ,
201+ stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/xsql.(*conn).execContext" ),
202+ query , m .String (), xcontext .IsIdempotent (ctx ), c .sinceLastUsage (),
204203 )
205204 defer func () {
206205 onDone (finalErr )
207206 }()
208207
209208 switch m {
210209 case DataQueryMode :
211- normalizedQuery , parameters , err := c .normalize (query , args ... )
212- if err != nil {
213- return nil , xerrors .WithStackTrace (err )
214- }
215- _ , res , err := c .session .Execute (ctx ,
216- txControl (ctx , c .defaultTxControl ),
217- normalizedQuery , & parameters , c .dataQueryOptions (ctx )... ,
218- )
219- if err != nil {
220- return nil , badconn .Map (xerrors .WithStackTrace (err ))
221- }
222- defer func () {
223- _ = res .Close ()
224- }()
225- if err = res .NextResultSetErr (ctx ); ! xerrors .Is (err , nil , io .EOF ) {
226- return nil , badconn .Map (xerrors .WithStackTrace (err ))
227- }
228- if err = res .Err (); err != nil {
229- return nil , badconn .Map (xerrors .WithStackTrace (err ))
230- }
231-
232- return resultNoRows {}, nil
210+ return c .executeDataQuery (ctx , query , args )
233211 case SchemeQueryMode :
234- normalizedQuery , _ , err := c .normalize (query )
235- if err != nil {
236- return nil , xerrors .WithStackTrace (err )
237- }
238- err = c .session .ExecuteSchemeQuery (ctx , normalizedQuery )
239- if err != nil {
240- return nil , badconn .Map (xerrors .WithStackTrace (err ))
241- }
242-
243- return resultNoRows {}, nil
212+ return c .executeSchemeQuery (ctx , query )
244213 case ScriptingQueryMode :
245- var res result.StreamResult
246- normalizedQuery , parameters , err := c .normalize (query , args ... )
247- if err != nil {
248- return nil , xerrors .WithStackTrace (err )
249- }
250- res , err = c .connector .parent .Scripting ().StreamExecute (ctx , normalizedQuery , & parameters )
251- if err != nil {
252- return nil , badconn .Map (xerrors .WithStackTrace (err ))
253- }
254- defer func () {
255- _ = res .Close ()
256- }()
257- if err = res .NextResultSetErr (ctx ); ! xerrors .Is (err , nil , io .EOF ) {
258- return nil , badconn .Map (xerrors .WithStackTrace (err ))
259- }
260- if err = res .Err (); err != nil {
261- return nil , badconn .Map (xerrors .WithStackTrace (err ))
262- }
263-
264- return resultNoRows {}, nil
214+ return c .executeScriptingQuery (ctx , query , args )
265215 default :
266216 return nil , fmt .Errorf ("unsupported query mode '%s' for execute query" , m )
267217 }
268218}
269219
220+ func (c * conn ) executeDataQuery (ctx context.Context , query string , args []driver.NamedValue ) (driver.Result , error ) {
221+ normalizedQuery , parameters , err := c .normalize (query , args ... )
222+ if err != nil {
223+ return nil , xerrors .WithStackTrace (err )
224+ }
225+
226+ _ , res , err := c .session .Execute (ctx ,
227+ txControl (ctx , c .defaultTxControl ),
228+ normalizedQuery , & parameters , c .dataQueryOptions (ctx )... ,
229+ )
230+ if err != nil {
231+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
232+ }
233+ defer res .Close ()
234+
235+ if err := res .NextResultSetErr (ctx ); err != nil && ! xerrors .Is (err , nil , io .EOF ) {
236+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
237+ }
238+ if err := res .Err (); err != nil {
239+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
240+ }
241+
242+ return resultNoRows {}, nil
243+ }
244+
245+ func (c * conn ) executeSchemeQuery (ctx context.Context , query string ) (driver.Result , error ) {
246+ normalizedQuery , _ , err := c .normalize (query )
247+ if err != nil {
248+ return nil , xerrors .WithStackTrace (err )
249+ }
250+
251+ if err := c .session .ExecuteSchemeQuery (ctx , normalizedQuery ); err != nil {
252+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
253+ }
254+
255+ return resultNoRows {}, nil
256+ }
257+
258+ func (c * conn ) executeScriptingQuery (
259+ ctx context.Context ,
260+ query string ,
261+ args []driver.NamedValue ,
262+ ) (driver.Result , error ) {
263+ normalizedQuery , parameters , err := c .normalize (query , args ... )
264+ if err != nil {
265+ return nil , xerrors .WithStackTrace (err )
266+ }
267+
268+ res , err := c .connector .parent .Scripting ().StreamExecute (ctx , normalizedQuery , & parameters )
269+ if err != nil {
270+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
271+ }
272+ defer res .Close ()
273+
274+ if err := res .NextResultSetErr (ctx ); err != nil && ! xerrors .Is (err , nil , io .EOF ) {
275+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
276+ }
277+ if err := res .Err (); err != nil {
278+ return nil , badconn .Map (xerrors .WithStackTrace (err ))
279+ }
280+
281+ return resultNoRows {}, nil
282+ }
283+
270284func (c * conn ) ExecContext (ctx context.Context , query string , args []driver.NamedValue ) (_ driver.Result , _ error ) {
271285 if ! c .isReady () {
272286 return nil , badconn .Map (xerrors .WithStackTrace (errNotReadyConn ))
0 commit comments