Skip to content

Commit

Permalink
executor: fix show create table for partitioned table (#10690)
Browse files Browse the repository at this point in the history
  • Loading branch information
tiancaiamao authored and zz-jason committed Jun 4, 2019
1 parent babf93f commit c0cb290
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 23 deletions.
49 changes: 26 additions & 23 deletions executor/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -671,8 +671,33 @@ func (e *ShowExec) fetchShowCreateTable() error {
buf.WriteString(fmt.Sprintf(" COMPRESSION='%s'", tb.Meta().Compression))
}

if hasAutoIncID {
autoIncID, err := tb.Allocator(e.ctx).NextGlobalAutoID(tb.Meta().ID)
if err != nil {
return errors.Trace(err)
}
// It's campatible with MySQL.
if autoIncID > 1 {
buf.WriteString(fmt.Sprintf(" AUTO_INCREMENT=%d", autoIncID))
}
}

if tb.Meta().ShardRowIDBits > 0 {
buf.WriteString(fmt.Sprintf("/*!90000 SHARD_ROW_ID_BITS=%d */", tb.Meta().ShardRowIDBits))
}

if len(tb.Meta().Comment) > 0 {
buf.WriteString(fmt.Sprintf(" COMMENT='%s'", format.OutputFormat(tb.Meta().Comment)))
}

// add partition info here.
partitionInfo := tb.Meta().Partition
appendPartitionInfo(tb.Meta().Partition, &buf)

e.appendRow([]interface{}{tb.Meta().Name.O, buf.String()})
return nil
}

func appendPartitionInfo(partitionInfo *model.PartitionInfo, buf *bytes.Buffer) {
if partitionInfo != nil {
// this if statement takes care of range columns case
if partitionInfo.Columns != nil && partitionInfo.Type == model.PartitionTypeRange {
Expand Down Expand Up @@ -703,28 +728,6 @@ func (e *ShowExec) fetchShowCreateTable() error {
}
buf.WriteString(")")
}

if hasAutoIncID {
autoIncID, err := tb.Allocator(e.ctx).NextGlobalAutoID(tb.Meta().ID)
if err != nil {
return errors.Trace(err)
}
// It's campatible with MySQL.
if autoIncID > 1 {
buf.WriteString(fmt.Sprintf(" AUTO_INCREMENT=%d", autoIncID))
}
}

if tb.Meta().ShardRowIDBits > 0 {
buf.WriteString(fmt.Sprintf("/*!90000 SHARD_ROW_ID_BITS=%d */", tb.Meta().ShardRowIDBits))
}

if len(tb.Meta().Comment) > 0 {
buf.WriteString(fmt.Sprintf(" COMMENT='%s'", format.OutputFormat(tb.Meta().Comment)))
}

e.appendRow([]interface{}{tb.Meta().Name.O, buf.String()})
return nil
}

// fetchShowCreateDatabase composes show create database result.
Expand Down
55 changes: 55 additions & 0 deletions executor/show_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -748,6 +748,61 @@ func (s *testSuite) TestShowCreateTable(c *C) {
" `ch2` varbinary(10) DEFAULT NULL\n"+
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin",
))

tk.MustExec("CREATE TABLE `log` (" +
"`LOG_ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT," +
"`ROUND_ID` bigint(20) UNSIGNED NOT NULL," +
"`USER_ID` int(10) UNSIGNED NOT NULL," +
"`USER_IP` int(10) UNSIGNED DEFAULT NULL," +
"`END_TIME` datetime NOT NULL," +
"`USER_TYPE` int(11) DEFAULT NULL," +
"`APP_ID` int(11) DEFAULT NULL," +
"PRIMARY KEY (`LOG_ID`,`END_TIME`)," +
"KEY `IDX_EndTime` (`END_TIME`)," +
"KEY `IDX_RoundId` (`ROUND_ID`)," +
"KEY `IDX_UserId_EndTime` (`USER_ID`,`END_TIME`)" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=505488 " +
"PARTITION BY RANGE ( month(`end_time`) ) (" +
"PARTITION p1 VALUES LESS THAN (2)," +
"PARTITION p2 VALUES LESS THAN (3)," +
"PARTITION p3 VALUES LESS THAN (4)," +
"PARTITION p4 VALUES LESS THAN (5)," +
"PARTITION p5 VALUES LESS THAN (6)," +
"PARTITION p6 VALUES LESS THAN (7)," +
"PARTITION p7 VALUES LESS THAN (8)," +
"PARTITION p8 VALUES LESS THAN (9)," +
"PARTITION p9 VALUES LESS THAN (10)," +
"PARTITION p10 VALUES LESS THAN (11)," +
"PARTITION p11 VALUES LESS THAN (12)," +
"PARTITION p12 VALUES LESS THAN (MAXVALUE))")
tk.MustQuery("show create table log").Check(testutil.RowsWithSep("|",
"log CREATE TABLE `log` (\n"+
" `LOG_ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,\n"+
" `ROUND_ID` bigint(20) UNSIGNED NOT NULL,\n"+
" `USER_ID` int(10) UNSIGNED NOT NULL,\n"+
" `USER_IP` int(10) UNSIGNED DEFAULT NULL,\n"+
" `END_TIME` datetime NOT NULL,\n"+
" `USER_TYPE` int(11) DEFAULT NULL,\n"+
" `APP_ID` int(11) DEFAULT NULL,\n"+
" PRIMARY KEY (`LOG_ID`,`END_TIME`),\n"+
" KEY `IDX_EndTime` (`END_TIME`),\n"+
" KEY `IDX_RoundId` (`ROUND_ID`),\n"+
" KEY `IDX_UserId_EndTime` (`USER_ID`,`END_TIME`)\n"+
") ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=505488\n"+
"PARTITION BY RANGE ( month(`end_time`) ) (\n"+
" PARTITION p1 VALUES LESS THAN (2),\n"+
" PARTITION p2 VALUES LESS THAN (3),\n"+
" PARTITION p3 VALUES LESS THAN (4),\n"+
" PARTITION p4 VALUES LESS THAN (5),\n"+
" PARTITION p5 VALUES LESS THAN (6),\n"+
" PARTITION p6 VALUES LESS THAN (7),\n"+
" PARTITION p7 VALUES LESS THAN (8),\n"+
" PARTITION p8 VALUES LESS THAN (9),\n"+
" PARTITION p9 VALUES LESS THAN (10),\n"+
" PARTITION p10 VALUES LESS THAN (11),\n"+
" PARTITION p11 VALUES LESS THAN (12),\n"+
" PARTITION p12 VALUES LESS THAN (MAXVALUE)\n"+
")"))
}

func (s *testSuite) TestShowEscape(c *C) {
Expand Down

0 comments on commit c0cb290

Please sign in to comment.