diff --git a/ddl/db_test.go b/ddl/db_test.go index b500884aa6c70..e2a81cfdc47ab 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -4248,12 +4248,19 @@ func (s *testDBSuite2) TestLockTables(c *C) { _, err = tk.Exec("create view v1 as select * from t1;") c.Assert(terror.ErrorEqual(err, infoschema.ErrTableNotLocked), IsTrue) - // Test for lock view was not supported. + // Test for locking view was not supported. tk.MustExec("unlock tables") tk.MustExec("create view v1 as select * from t1;") _, err = tk.Exec("lock tables v1 read") c.Assert(terror.ErrorEqual(err, table.ErrUnsupportedOp), IsTrue) + // Test for locking sequence was not supported. + tk.MustExec("unlock tables") + tk.MustExec("create sequence seq") + _, err = tk.Exec("lock tables seq read") + c.Assert(terror.ErrorEqual(err, table.ErrUnsupportedOp), IsTrue) + tk.MustExec("drop sequence seq") + // Test for create/drop/alter database when session is holding the table locks. tk.MustExec("unlock tables") tk.MustExec("lock table t1 write") diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index c545a87b732a7..0499441451947 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -3565,6 +3565,9 @@ func (d *ddl) TruncateTable(ctx sessionctx.Context, ti ast.Ident) error { if err != nil { return errors.Trace(err) } + if tb.Meta().IsView() || tb.Meta().IsSequence() { + return infoschema.ErrTableNotExists.GenWithStackByArgs(schema.Name.O, tb.Meta().Name.O) + } genIDs, err := d.genGlobalIDs(1) if err != nil { return errors.Trace(err) @@ -4260,7 +4263,7 @@ func (d *ddl) LockTables(ctx sessionctx.Context, stmt *ast.LockTablesStmt) error if err != nil { return errors.Trace(err) } - if t.Meta().IsView() { + if t.Meta().IsView() || t.Meta().IsSequence() { return table.ErrUnsupportedOp.GenWithStackByArgs() } err = checkTableLocked(t.Meta(), tl.Type, sessionInfo) @@ -4350,7 +4353,7 @@ func (d *ddl) CleanupTableLock(ctx sessionctx.Context, tables []*ast.TableName) if err != nil { return errors.Trace(err) } - if t.Meta().IsView() { + if t.Meta().IsView() || t.Meta().IsSequence() { return table.ErrUnsupportedOp } // Maybe the table t was not locked, but still try to unlock this table. diff --git a/ddl/table.go b/ddl/table.go index 921afdf9b34ac..d6518879b2295 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -430,7 +430,7 @@ func onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ erro if err != nil { return ver, errors.Trace(err) } - if tblInfo.IsView() { + if tblInfo.IsView() || tblInfo.IsSequence() { job.State = model.JobStateCancelled return ver, infoschema.ErrTableNotExists.GenWithStackByArgs(job.SchemaName, tblInfo.Name.O) } diff --git a/executor/ddl_test.go b/executor/ddl_test.go index 71e328604a63b..476d4017ec004 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -287,6 +287,19 @@ func (s *testSuite6) TestIssue16250(c *C) { c.Assert(err.Error(), Equals, "[schema:1146]Table 'test.view_issue16250' doesn't exist") } +func (s testSuite6) TestTruncateSequence(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("create sequence if not exists seq") + _, err := tk.Exec("truncate table seq") + c.Assert(err.Error(), Equals, "[schema:1146]Table 'test.seq' doesn't exist") + tk.MustExec("create sequence if not exists seq1 start 10 increment 2 maxvalue 10000 cycle") + _, err = tk.Exec("truncate table seq1") + c.Assert(err.Error(), Equals, "[schema:1146]Table 'test.seq1' doesn't exist") + tk.MustExec("drop sequence if exists seq") + tk.MustExec("drop sequence if exists seq1") +} + func (s *testSuite6) TestCreateViewWithOverlongColName(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test")