diff --git a/ddl/ddl.go b/ddl/ddl.go index 84400fa064..88eb8a1ace 100644 --- a/ddl/ddl.go +++ b/ddl/ddl.go @@ -396,7 +396,7 @@ func (d *ddl) AlterTable(ctx context.Context, ident table.Ident, specs []*AlterS tbl, err := is.TableByName(ident.Schema, ident.Name) if err != nil { - return errors.Trace(err) + return errors.Trace(ErrNotExists) } for _, spec := range specs { switch spec.Action { @@ -528,7 +528,7 @@ func (d *ddl) DropTable(ctx context.Context, ti table.Ident) (err error) { tb, err := is.TableByName(ti.Schema, ti.Name) if err != nil { - return errors.Trace(err) + return errors.Trace(ErrNotExists) } job := &model.Job{ @@ -573,7 +573,7 @@ func (d *ddl) CreateIndex(ctx context.Context, ti table.Ident, unique bool, inde t, err := is.TableByName(ti.Schema, ti.Name) if err != nil { - return errors.Trace(err) + return errors.Trace(ErrNotExists) } if _, ok := is.IndexByName(ti.Schema, ti.Name, indexName); ok { return errors.Errorf("CREATE INDEX: index already exist %s", indexName) diff --git a/ddl/table.go b/ddl/table.go index 70a9e2af93..bd915ed556 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -19,6 +19,7 @@ import ( "github.com/pingcap/tidb/meta/autoid" "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/table" + qerror "github.com/pingcap/tidb/util/errors" "github.com/pingcap/tidb/util/errors2" ) @@ -34,7 +35,10 @@ func (d *ddl) onTableCreate(t *meta.TMeta, job *model.Job) error { tbInfo.State = model.StateNone tables, err := t.ListTables(schemaID) - if err != nil { + if errors2.ErrorEqual(err, meta.ErrDBNotExists) { + job.State = model.JobCancelled + return errors.Trace(qerror.ErrDatabaseNotExist) + } else if err != nil { return errors.Trace(err) } @@ -87,9 +91,14 @@ func (d *ddl) onTableDrop(t *meta.TMeta, job *model.Job) error { tableID := job.TableID tblInfo, err := t.GetTable(schemaID, tableID) - if err != nil { + if errors2.ErrorEqual(err, meta.ErrDBNotExists) { + job.State = model.JobCancelled + return errors.Trace(qerror.ErrDatabaseNotExist) + } else if err != nil { return errors.Trace(err) - } else if tblInfo == nil { + } + + if tblInfo == nil { job.State = model.JobCancelled return errors.Trace(ErrNotExists) } diff --git a/stmt/stmts/drop.go b/stmt/stmts/drop.go index dbbe15980d..fae8ec055f 100644 --- a/stmt/stmts/drop.go +++ b/stmt/stmts/drop.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/stmt" "github.com/pingcap/tidb/table" + qerror "github.com/pingcap/tidb/util/errors" "github.com/pingcap/tidb/util/errors2" "github.com/pingcap/tidb/util/format" ) @@ -113,7 +114,7 @@ func (s *DropTableStmt) Exec(ctx context.Context) (rset.Recordset, error) { err := sessionctx.GetDomain(ctx).DDL().DropTable(ctx, ti.Full(ctx)) // TODO: we should return special error for table not exist, checking "not exist" is not enough, // because some other errors may contain this error string too. - if err != nil && strings.HasSuffix(err.Error(), "not exist") { + if errors2.ErrorEqual(err, ddl.ErrNotExists) || errors2.ErrorEqual(err, qerror.ErrDatabaseNotExist) { notExistTables = append(notExistTables, ti.String()) } else if err != nil { return nil, errors.Trace(err) diff --git a/table/tables/tables.go b/table/tables/tables.go index beee21f79e..37d41d3164 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -82,6 +82,7 @@ func NewTable(tableID int64, tableName string, dbName string, cols []*column.Col indexPrefix: fmt.Sprintf("%d_i", tableID), alloc: alloc, Columns: cols, + state: model.StatePublic, } return t }