From 3b40c98e36f7c2d43b378a542b2b4a785abae975 Mon Sep 17 00:00:00 2001 From: bb7133 Date: Sun, 23 Dec 2018 16:08:05 +0800 Subject: [PATCH] fix merge conflict --- ddl/db_test.go | 8 ++++++-- ddl/table.go | 1 - ddl/table_test.go | 36 --------------------------------- executor/builder.go | 9 +++++++-- executor/ddl.go | 17 +++++----------- executor/ddl_test.go | 1 - planner/core/preprocess_test.go | 6 +++--- 7 files changed, 21 insertions(+), 57 deletions(-) diff --git a/ddl/db_test.go b/ddl/db_test.go index 4f0c562a99a4c..7369e7400aa0c 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -557,7 +557,11 @@ func (s *testDBSuite) TestCancelCreateTable(c *C) { checkErr = errors.Trace(err) return } - errs, err := admin.CancelJobs(hookCtx.Txn(true), jobIDs) + txn, err := hookCtx.Txn(true) + if err != nil { + checkErr = errors.Trace(err) + } + errs, err := admin.CancelJobs(txn, jobIDs) if err != nil { checkErr = errors.Trace(err) return @@ -566,7 +570,7 @@ func (s *testDBSuite) TestCancelCreateTable(c *C) { checkErr = errors.Trace(errs[0]) return } - checkErr = hookCtx.Txn(true).Commit(context.Background()) + checkErr = txn.Commit(context.Background()) } } originHook := s.dom.DDL().GetHook() diff --git a/ddl/table.go b/ddl/table.go index 684b6f2f86865..e3da4a6f88afd 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -94,7 +94,6 @@ func onCreateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err erro // TODO: Add restrictions to this operation. go splitTableRegion(d.store, tbInfo.ID) } - ver, err = updateVersionAndTableInfo(t, job, tbInfo, originalState != tbInfo.State) case model.StateWriteReorganization: // reorganization -> public (insert data before we make the table public) err = doCreateTableInsert(d, t, job, tbInfo, snapshotTS) diff --git a/ddl/table_test.go b/ddl/table_test.go index 0e890f66d12f3..58712ba16690e 100644 --- a/ddl/table_test.go +++ b/ddl/table_test.go @@ -124,42 +124,6 @@ func testCreateTable(c *C, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, return job } -func testCreateTableWithSelect(c *C, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionCreateTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{tblInfo, true /*withSelect*/}, - } - err := d.doDDLJob(ctx, job) - c.Assert(err, IsNil) - - v := getSchemaVer(c, ctx) - tblInfo.State = model.StatePublic - checkHistoryJobArgs(c, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - tblInfo.State = model.StateNone - return job -} - -func testRevealTable(c *C, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { - job := &model.Job{ - SchemaID: dbInfo.ID, - TableID: tblInfo.ID, - Type: model.ActionRevealTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []interface{}{tblInfo}, - } - err := d.doDDLJob(ctx, job) - c.Assert(err, IsNil) - - v := getSchemaVer(c, ctx) - tblInfo.State = model.StatePublic - checkHistoryJobArgs(c, ctx, job.ID, &historyJobArgs{ver: v, tbl: tblInfo}) - tblInfo.State = model.StateNone - return job -} - func testCreateView(c *C, ctx sessionctx.Context, d *ddl, dbInfo *model.DBInfo, tblInfo *model.TableInfo) *model.Job { job := &model.Job{ SchemaID: dbInfo.ID, diff --git a/executor/builder.go b/executor/builder.go index fae7a55d65a49..c7d1f9c978ab2 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -696,7 +696,12 @@ func (b *executorBuilder) buildCreateTableInsert(v *plannercore.DDL, tableID int } selectExec := b.build(v.InsertPlan.SelectPlan) - m := meta.NewMeta(b.ctx.Txn(true)) + txn, err := b.ctx.Txn(true) + if err != nil { + b.err = errors.Trace(err) + return nil + } + m := meta.NewMeta(txn) dbInfo, ok := b.is.SchemaByName(stmt.Table.Schema) if !ok { b.err = infoschema.ErrDatabaseNotExists.GenWithStackByArgs(stmt.Table.Schema.L) @@ -709,7 +714,7 @@ func (b *executorBuilder) buildCreateTableInsert(v *plannercore.DDL, tableID int } // We have to create an allocator here, which is not the one created by InfoSchema, but it should be fine. - alloc := autoid.NewAllocator(b.ctx.GetStore(), tbInfo.GetDBID(dbInfo.ID)) + alloc := autoid.NewAllocator(b.ctx.GetStore(), tbInfo.GetDBID(dbInfo.ID), tbInfo.IsAutoIncColUnsigned()) tbl, err := tables.TableFromMeta(alloc, tbInfo) if err != nil { b.err = errors.Trace(err) diff --git a/executor/ddl.go b/executor/ddl.go index 8f4cd67e016a2..6b92b05af0d41 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -71,7 +71,11 @@ func (e *DDLExec) toErr(err error) error { // Open implements the Executor Open interface. func (e *DDLExec) Open(context.Context) error { - e.originalStartTS = e.ctx.Txn(true).StartTS() + txn, err := e.ctx.Txn(true) + if err != nil { + return err + } + e.originalStartTS = txn.StartTS() return nil } @@ -94,17 +98,6 @@ func (e *DDLExec) Next(ctx context.Context, chk *chunk.Chunk) (err error) { case *ast.CreateDatabaseStmt: err = e.executeCreateDatabase(x) case *ast.CreateTableStmt: - var tableID int64 - tableID, err = e.executeCreateTable(x) - if err != nil { - return errors.Trace(e.toErr(err)) - } - if tableID != 0 { - err = e.executeSelectInsert(ctx, chk, x, tableID) - if err != nil { - return errors.Trace(e.toErr(err)) - } - } err = e.executeCreateTable(x) case *ast.CreateViewStmt: err = e.executeCreateView(x) diff --git a/executor/ddl_test.go b/executor/ddl_test.go index 54f7c6d2b10f7..194d64e163ce7 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -25,7 +25,6 @@ import ( "github.com/pingcap/parser/model" "github.com/pingcap/parser/mysql" "github.com/pingcap/parser/terror" - "github.com/pingcap/tidb/ast" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/meta/autoid" diff --git a/planner/core/preprocess_test.go b/planner/core/preprocess_test.go index 77e06204039e5..7838d64a1b299 100644 --- a/planner/core/preprocess_test.go +++ b/planner/core/preprocess_test.go @@ -191,10 +191,10 @@ func (s *testValidatorSuite) TestValidator(c *C) { {"select * from (select 1 ) a , (select 2) b, (select * from (select 3) a join (select 4) b) c;", false, nil}, {"CREATE VIEW V (a,b,c) AS SELECT 1,1,3;", false, nil}, - {"CREATE TABLE t SELECT * FROM u FOR UPDATE;", false, errors.New("[planner:1746]Can't update table 'u' while 't' is being created.")}, - {"CREATE TABLE t SELECT * FROM u FOR UPDATE UNION SELECT * FROM v;", false, errors.New("[planner:1746]Can't update table 'u' while 't' is being created.")}, + {"CREATE TABLE t SELECT * FROM u FOR UPDATE;", false, core.ErrCantUpdateTableInCreateTableSelect.GenWithStackByArgs("u", "t")}, + {"CREATE TABLE t SELECT * FROM u FOR UPDATE UNION SELECT * FROM v;", false, core.ErrCantUpdateTableInCreateTableSelect.GenWithStackByArgs("u", "t")}, {"CREATE TABLE t SELECT u.a FROM u JOIN v ON u.a = v.a FOR UPDATE;", false, core.ErrCantUpdateTableInCreateTableSelect}, - {"CREATE TABLE t SELECT a FROM (SELECT 1 AS a, 2 AS b) AS temp FOR UPDATE;", false, errors.New("[planner:1746]Can't update table 'temp' while 't' is being created.")}, + {"CREATE TABLE t SELECT a FROM (SELECT 1 AS a, 2 AS b) AS temp FOR UPDATE;", false, core.ErrCantUpdateTableInCreateTableSelect.GenWithStackByArgs("temp", "t")}, {"CREATE TABLE t SELECT a FROM (SELECT 1 AS a, 2 AS b FOR UPDATE) AS temp;", false, nil}, }