Skip to content

Commit

Permalink
feat: support show stmt (#209)
Browse files Browse the repository at this point in the history
  • Loading branch information
dk-lockdown committed Aug 10, 2022
1 parent b318070 commit 1b4e902
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 11 deletions.
32 changes: 21 additions & 11 deletions pkg/executor/sharding.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,9 @@ func (executor *ShardingExecutor) ExecutorComQuery(ctx context.Context, sql stri
if queryStmt == nil {
return nil, 0, errors.New("query stmt should not be nil")
}
if _, ok := queryStmt.(*ast.SetStmt); ok {

switch stmt := queryStmt.(type) {
case *ast.SetStmt:
for _, db := range executor.all {
go func(db *DataSourceBrief) {
if _, _, err := db.DB.Query(spanCtx, sql); err != nil {
Expand All @@ -224,20 +226,28 @@ func (executor *ShardingExecutor) ExecutorComQuery(ctx context.Context, sql stri
AffectedRows: 0,
InsertId: 0,
}, 0, nil
}
if selectStmt, ok := queryStmt.(*ast.SelectStmt); ok {
if selectStmt.Fields != nil && len(selectStmt.Fields.Fields) > 0 {
if _, ok := selectStmt.Fields.Fields[0].Expr.(*ast.VariableExpr); ok {
case *ast.ShowStmt:
return executor.all[0].DB.Query(spanCtx, sql)
case *ast.SelectStmt:
if stmt.Fields != nil && len(stmt.Fields.Fields) > 0 {
if _, ok := stmt.Fields.Fields[0].Expr.(*ast.VariableExpr); ok {
return executor.all[0].DB.Query(spanCtx, sql)
}
}
plan, err = executor.optimizer.Optimize(spanCtx, queryStmt)
if err != nil {
return nil, 0, err
}
proto.WithVariable(spanCtx, constant.TransactionTimeout, executor.config.TransactionTimeout)
return plan.Execute(spanCtx)
default:
plan, err = executor.optimizer.Optimize(spanCtx, queryStmt)
if err != nil {
return nil, 0, err
}
proto.WithVariable(spanCtx, constant.TransactionTimeout, executor.config.TransactionTimeout)
return plan.Execute(spanCtx)
}
plan, err = executor.optimizer.Optimize(spanCtx, queryStmt)
if err != nil {
return nil, 0, err
}
proto.WithVariable(spanCtx, constant.TransactionTimeout, executor.config.TransactionTimeout)
return plan.Execute(spanCtx)
}

func (executor *ShardingExecutor) ExecutorComStmtExecute(
Expand Down
54 changes: 54 additions & 0 deletions test/shd/sharding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,60 @@ func (suite *_ShardingSuite) TestSelectCount() {
}
}

func (suite *_ShardingSuite) TestShowDatabases() {
rows, err := suite.db.Query("SHOW DATABASES")
if suite.NoErrorf(err, "show databases error: %v", err) {
var (
database string
)
for rows.Next() {
err := rows.Scan(&database)
suite.NoError(err)
suite.T().Logf("database: %s", database)
}
}
}

func (suite *_ShardingSuite) TestShowEngines() {
rows, err := suite.db.Query("SHOW ENGINES")
if suite.NoErrorf(err, "show engines error: %v", err) {
var (
engine, support, comment, transactions, xa, savepoints string
)
for rows.Next() {
err := rows.Scan(&engine, &support, &comment, &transactions, &xa, &savepoints)
suite.NoError(err)
suite.T().Logf("%s %s %s %s %s %s", engine, support, comment, transactions, xa, savepoints)
}
}
}

func (suite *_ShardingSuite) TestShowCreateDatabase() {
rows, err := suite.db.Query("SHOW CREATE DATABASE drug;")
if suite.NoErrorf(err, "show engines error: %v", err) {
var (
database, createDatabase string
)
for rows.Next() {
err := rows.Scan(&database, &createDatabase)
suite.NoError(err)
suite.T().Logf("%s %s", database, createDatabase)
}
}

rows, err = suite.db.Query("SHOW CREATE SCHEMA drug;")
if suite.NoErrorf(err, "show engines error: %v", err) {
var (
database, createDatabase string
)
for rows.Next() {
err := rows.Scan(&database, &createDatabase)
suite.NoError(err)
suite.T().Logf("%s %s", database, createDatabase)
}
}
}

func (suite *_ShardingSuite) TestDeleteDrugResource() {
result, err := suite.db.Exec(deleteDrugResource, 10, 20)
suite.Assert().Nil(err)
Expand Down

0 comments on commit 1b4e902

Please sign in to comment.