Skip to content

Commit af68faa

Browse files
authored
Merge pull request #3085 from dolthub/elianddb/9425-enum-zero-strict-mode
Fixes dolthub/dolt#9491 Fix enum DEFAULT NULL validation
2 parents 82ed525 + ead1e15 commit af68faa

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

enginetest/queries/script_queries.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8760,9 +8760,56 @@ where
87608760
},
87618761
},
87628762
},
8763+
{
8764+
Name: "enum import error message validation",
8765+
Dialect: "mysql",
8766+
SetUpScript: []string{
8767+
"SET sql_mode = 'STRICT_TRANS_TABLES';",
8768+
"CREATE TABLE shirts (name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large'), color ENUM('red', 'blue'));",
8769+
},
8770+
Assertions: []ScriptTestAssertion{
8771+
{
8772+
Query: "INSERT INTO shirts VALUES ('shirt1', 'x-small', 'red');",
8773+
Expected: []sql.Row{
8774+
{types.NewOkResult(1)},
8775+
},
8776+
},
8777+
{
8778+
Query: "INSERT INTO shirts VALUES ('shirt2', 'other', 'green');",
8779+
ExpectedErrStr: "Data truncated for column 'size' at row 1",
8780+
},
8781+
},
8782+
},
8783+
{
8784+
Name: "enum default null validation",
8785+
Dialect: "mysql",
8786+
SetUpScript: []string{
8787+
"SET sql_mode = 'STRICT_TRANS_TABLES';",
8788+
},
8789+
Assertions: []ScriptTestAssertion{
8790+
{
8791+
Query: "CREATE TABLE test_enum (pk int NOT NULL, e enum('a','b') DEFAULT NULL, PRIMARY KEY (pk));",
8792+
Expected: []sql.Row{
8793+
{types.NewOkResult(0)},
8794+
},
8795+
},
8796+
{
8797+
Query: "INSERT INTO test_enum (pk) VALUES (1);",
8798+
Expected: []sql.Row{
8799+
{types.NewOkResult(1)},
8800+
},
8801+
},
8802+
{
8803+
Query: "SELECT pk, e FROM test_enum;",
8804+
Expected: []sql.Row{
8805+
{1, nil},
8806+
},
8807+
},
8808+
},
8809+
},
87638810
{
87648811
// This is with STRICT_TRANS_TABLES or STRICT_ALL_TABLES in sql_mode
8765-
Skip: true,
8812+
Skip: true, // TODO: Fix error type to match MySQL exactly (should be ErrInvalidColumnDefaultValue)
87668813
Name: "enums with empty string",
87678814
Dialect: "mysql",
87688815
SetUpScript: []string{

sql/analyzer/resolve_column_defaults.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,9 @@ func validateEnumLiteralDefault(enumType sql.EnumType, colDefault *sql.ColumnDef
296296
}
297297

298298
switch v := val.(type) {
299+
case nil:
300+
// NULL is a valid default for enum columns
301+
return nil
299302
case string:
300303
// For string values, check if it's a direct enum value match
301304
enumValues := enumType.Values()

0 commit comments

Comments
 (0)