@@ -211,7 +211,9 @@ func (executor *ShardingExecutor) ExecutorComQuery(ctx context.Context, sql stri
211211 if queryStmt == nil {
212212 return nil , 0 , errors .New ("query stmt should not be nil" )
213213 }
214- if _ , ok := queryStmt .(* ast.SetStmt ); ok {
214+
215+ switch stmt := queryStmt .(type ) {
216+ case * ast.SetStmt :
215217 for _ , db := range executor .all {
216218 go func (db * DataSourceBrief ) {
217219 if _ , _ , err := db .DB .Query (spanCtx , sql ); err != nil {
@@ -224,20 +226,28 @@ func (executor *ShardingExecutor) ExecutorComQuery(ctx context.Context, sql stri
224226 AffectedRows : 0 ,
225227 InsertId : 0 ,
226228 }, 0 , nil
227- }
228- if selectStmt , ok := queryStmt .(* ast.SelectStmt ); ok {
229- if selectStmt .Fields != nil && len (selectStmt .Fields .Fields ) > 0 {
230- if _ , ok := selectStmt .Fields .Fields [0 ].Expr .(* ast.VariableExpr ); ok {
229+ case * ast.ShowStmt :
230+ return executor .all [0 ].DB .Query (spanCtx , sql )
231+ case * ast.SelectStmt :
232+ if stmt .Fields != nil && len (stmt .Fields .Fields ) > 0 {
233+ if _ , ok := stmt .Fields .Fields [0 ].Expr .(* ast.VariableExpr ); ok {
231234 return executor .all [0 ].DB .Query (spanCtx , sql )
232235 }
233236 }
237+ plan , err = executor .optimizer .Optimize (spanCtx , queryStmt )
238+ if err != nil {
239+ return nil , 0 , err
240+ }
241+ proto .WithVariable (spanCtx , constant .TransactionTimeout , executor .config .TransactionTimeout )
242+ return plan .Execute (spanCtx )
243+ default :
244+ plan , err = executor .optimizer .Optimize (spanCtx , queryStmt )
245+ if err != nil {
246+ return nil , 0 , err
247+ }
248+ proto .WithVariable (spanCtx , constant .TransactionTimeout , executor .config .TransactionTimeout )
249+ return plan .Execute (spanCtx )
234250 }
235- plan , err = executor .optimizer .Optimize (spanCtx , queryStmt )
236- if err != nil {
237- return nil , 0 , err
238- }
239- proto .WithVariable (spanCtx , constant .TransactionTimeout , executor .config .TransactionTimeout )
240- return plan .Execute (spanCtx )
241251}
242252
243253func (executor * ShardingExecutor ) ExecutorComStmtExecute (ctx context.Context , stmt * proto.Stmt ) (proto.Result , uint16 , error ) {
0 commit comments