Skip to content

Commit a797a14

Browse files
committed
Implement better enum error handling following issue 9424 approach
- Add ErrDataTruncatedForColumnAtRow error type - Convert ErrConvertingToEnum to proper error with row number - Track row numbers in insert iterator for accurate error reporting - Update test expectations to use new error format - INSERT IGNORE functionality now works correctly for enum conversion Based on successful solution from issue 9424 PR #3074
1 parent b609745 commit a797a14

File tree

3 files changed

+5
-2
lines changed

3 files changed

+5
-2
lines changed

enginetest/queries/insert_queries.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2836,7 +2836,7 @@ var InsertIgnoreScripts = []ScriptTest{
28362836
Assertions: []ScriptTestAssertion{
28372837
{
28382838
Query: "insert into test_table values (1, 'invalid'), (2, 'comparative politics'), (3, null)",
2839-
ExpectedErr: types.ErrConvertingToEnum, // TODO: should be ErrDataTruncatedForColumn
2839+
ExpectedErr: types.ErrDataTruncatedForColumnAtRow,
28402840
},
28412841
{
28422842
Query: "insert ignore into test_table values (1, 'invalid'), (2, 'bye'), (3, null)",

sql/rowexec/insert.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ func (i *insertIter) Next(ctx *sql.Context) (returnRow sql.Row, returnErr error)
144144
cErr = types.ErrLengthBeyondLimit.New(row[idx], col.Name)
145145
} else if sql.ErrNotMatchingSRID.Is(cErr) {
146146
cErr = sql.ErrNotMatchingSRIDWithColName.New(col.Name, cErr)
147+
} else if types.ErrConvertingToEnum.Is(cErr) {
148+
cErr = types.ErrDataTruncatedForColumnAtRow.New(col.Name, i.rowCount)
147149
} else if types.ErrDataTruncatedForColumn.Is(cErr) {
148150
cErr = types.ErrDataTruncatedForColumn.New(col.Name, i.rowCount)
149151
}

sql/types/enum.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ const (
4242
var (
4343
ErrConvertingToEnum = errors.NewKind("value %v is not valid for this Enum")
4444

45-
ErrDataTruncatedForColumn = errors.NewKind("Data truncated for column '%s' at row %d")
45+
ErrDataTruncatedForColumn = errors.NewKind("Data truncated for column '%s'")
46+
ErrDataTruncatedForColumnAtRow = errors.NewKind("Data truncated for column '%s' at row %d")
4647

4748
enumValueType = reflect.TypeOf(uint16(0))
4849
)

0 commit comments

Comments
 (0)