Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions enginetest/queries/create_table_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,12 @@ var CreateTableQueries = []WriteQueryTest{
SelectQuery: `SHOW CREATE TABLE t1`,
ExpectedSelect: []sql.Row{{"t1", "CREATE TABLE `t1` (\n `pk` varbinary(10) NOT NULL,\n PRIMARY KEY (`pk`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin"}},
},
{
WriteQuery: `create table t1 (pk bit(2) default 2)`,
ExpectedWriteResult: []sql.Row{{types.NewOkResult(0)}},
SelectQuery: `SHOW CREATE TABLE t1`,
ExpectedSelect: []sql.Row{{"t1", "CREATE TABLE `t1` (\n `pk` bit(2) DEFAULT b'10'\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin"}},
},
}

var CreateTableScriptTests = []ScriptTest{
Expand Down
41 changes: 27 additions & 14 deletions sql/rowexec/show_iters.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,25 @@ type NameAndSchema interface {
Schema() sql.Schema
}

func convertColumnDefaultToString(ctx *sql.Context, def *sql.ColumnDefaultValue) (string, error) {
// TODO : string literals should have character set introducer
colDefaultStr := def.String()
defType := def.Type()

// These types do not need to be quoted
if !def.IsLiteral() || colDefaultStr == "NULL" || types.IsTime(defType) || types.IsText(defType) {
return colDefaultStr, nil
}
v, err := def.Eval(ctx, nil)
if err != nil {
return "", err
}
if types.IsBit(def.OutType) {
return fmt.Sprintf("b'%b'", v), nil
}
return fmt.Sprintf("'%v'", v), nil
}

func (i *showCreateTablesIter) produceCreateTableStatement(ctx *sql.Context, table sql.Table, schema sql.Schema, pkSchema sql.PrimaryKeySchema) (string, error) {
colStmts := make([]string, len(schema))
var primaryKeyCols []string
Expand All @@ -395,26 +414,20 @@ func (i *showCreateTablesIter) produceCreateTableStatement(ctx *sql.Context, tab
tableCollation := table.Collation()
for i, col := range schema {
var colDefaultStr string
var err error
if col.Default != nil && col.Generated == nil {
// TODO : string literals should have character set introducer
colDefaultStr = col.Default.String()
if colDefaultStr != "NULL" && col.Default.IsLiteral() && !types.IsTime(col.Default.Type()) && !types.IsText(col.Default.Type()) {
v, err := col.Default.Eval(ctx, nil)
if err != nil {
return "", err
}
colDefaultStr = fmt.Sprintf("'%v'", v)
colDefaultStr, err = convertColumnDefaultToString(ctx, col.Default)
if err != nil {
return "", err
}
}

var onUpdateStr string
if col.OnUpdate != nil {
onUpdateStr = col.OnUpdate.String()
if onUpdateStr != "NULL" && col.OnUpdate.IsLiteral() && !types.IsTime(col.OnUpdate.Type()) && !types.IsText(col.OnUpdate.Type()) {
v, err := col.OnUpdate.Eval(ctx, nil)
if err != nil {
return "", err
}
onUpdateStr = fmt.Sprintf("'%v'", v)
onUpdateStr, err = convertColumnDefaultToString(ctx, col.OnUpdate)
if err != nil {
return "", err
}
}

Expand Down
Loading