Skip to content

Commit 1f84fda

Browse files
elianddbclaude
andcommitted
Fix CREATE TABLE enum default validation to return correct error type
Modified columndefault.go to detect enum data truncation errors and return ErrInvalidColumnDefaultValue instead of ErrIncompatibleDefaultType to match MySQL behavior exactly. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 5d8690a commit 1f84fda

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

enginetest/queries/script_queries.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8706,7 +8706,7 @@ where
87068706
},
87078707
{
87088708
Query: "create table tt (e enum('a', 'b', 'c') default 0)",
8709-
ExpectedErr: sql.ErrIncompatibleDefaultType,
8709+
ExpectedErr: sql.ErrInvalidColumnDefaultValue,
87108710
},
87118711
{
87128712
Query: "create table et (e enum('a', 'b', '', 'c'));",

sql/columndefault.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package sql
1616

1717
import (
1818
"fmt"
19+
"strings"
1920
)
2021

2122
// ColumnDefaultValue is an expression representing the default value of a column. May represent both a default literal
@@ -83,6 +84,10 @@ func (e *ColumnDefaultValue) Eval(ctx *Context, r Row) (interface{}, error) {
8384
if e.OutType != nil {
8485
var inRange ConvertInRange
8586
if val, inRange, err = e.OutType.Convert(ctx, val); err != nil {
87+
// For enum data truncation errors, return Invalid default value error to match MySQL
88+
if strings.HasPrefix(e.OutType.String(), "enum(") && strings.Contains(err.Error(), "Data truncated for column") {
89+
return nil, ErrInvalidColumnDefaultValue.New("(unknown)")
90+
}
8691
return nil, ErrIncompatibleDefaultType.New()
8792
} else if !inRange {
8893
return nil, ErrValueOutOfRange.New(val, e.OutType)
@@ -229,6 +234,10 @@ func (e *ColumnDefaultValue) CheckType(ctx *Context) error {
229234
}
230235
_, inRange, err := e.OutType.Convert(ctx, val)
231236
if err != nil {
237+
// For enum data truncation errors, return Invalid default value error to match MySQL
238+
if strings.HasPrefix(e.OutType.String(), "enum(") && strings.Contains(err.Error(), "Data truncated for column") {
239+
return ErrInvalidColumnDefaultValue.New("(unknown)")
240+
}
232241
return ErrIncompatibleDefaultType.Wrap(err)
233242
} else if !inRange {
234243
return ErrIncompatibleDefaultType.Wrap(ErrValueOutOfRange.New(val, e.Expr))

0 commit comments

Comments
 (0)