func (*testSuite) TestT(c *C) { var ident = ast.Ident{ Name: model.NewCIStr("t"), } c.Assert(ident.String(), Not(Equals), "") driver := localstore.Driver{Driver: goleveldb.MemoryDriver{}} store, err := driver.Open("memory") c.Assert(err, IsNil) se, err := tidb.CreateSession(store) c.Assert(err, IsNil) ctx := se.(context.Context) db.BindCurrentSchema(ctx, "test") fullIdent := ident.Full(ctx) c.Assert(fullIdent.Schema.L, Equals, "test") c.Assert(fullIdent.Name.L, Equals, "t") c.Assert(fullIdent.String(), Not(Equals), "") fullIdent2 := fullIdent.Full(ctx) c.Assert(fullIdent2.Schema.L, Equals, fullIdent.Schema.L) }
func (e *DDLExec) executeDropTable(s *ast.DropTableStmt) error { var notExistTables []string for _, tn := range s.Tables { fullti := ast.Ident{Schema: tn.Schema, Name: tn.Name} schema, ok := e.is.SchemaByName(tn.Schema) if !ok { // 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. notExistTables = append(notExistTables, fullti.String()) continue } tb, err := e.is.TableByName(tn.Schema, tn.Name) if err != nil && strings.HasSuffix(err.Error(), "not exist") { notExistTables = append(notExistTables, fullti.String()) continue } else if err != nil { return errors.Trace(err) } // Check Privilege privChecker := privilege.GetPrivilegeChecker(e.ctx) hasPriv, err := privChecker.Check(e.ctx, schema, tb.Meta(), mysql.DropPriv) if err != nil { return errors.Trace(err) } if !hasPriv { return errors.Errorf("You do not have the privilege to drop table %s.%s.", tn.Schema, tn.Name) } err = sessionctx.GetDomain(e.ctx).DDL().DropTable(e.ctx, fullti) if infoschema.ErrDatabaseNotExists.Equal(err) || infoschema.ErrTableNotExists.Equal(err) { notExistTables = append(notExistTables, fullti.String()) } else if err != nil { return errors.Trace(err) } } if len(notExistTables) > 0 && !s.IfExists { return infoschema.ErrTableDropExists.Gen("DROP TABLE: table %s does not exist", strings.Join(notExistTables, ",")) } return nil }