Skip to content

Commit c384d04

Browse files
elianddbclaude
andcommitted
Fix enum Compare method to handle ErrDataTruncatedForColumn in comparisons
During enum comparisons, the Convert method may return ErrDataTruncatedForColumn in strict mode. The Compare method should ignore this error type to allow comparisons to complete successfully, matching the existing behavior for ErrConvertingToEnum. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 46da43b commit c384d04

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

sql/types/enum.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ func (t EnumType) Compare(ctx context.Context, a interface{}, b interface{}) (in
129129
// Attempt to convert the values to their enum values, but don't error
130130
// out if they aren't valid enum values.
131131
ai, _, err := t.Convert(ctx, a)
132-
if err != nil && !ErrConvertingToEnum.Is(err) {
132+
if err != nil && !ErrConvertingToEnum.Is(err) && !ErrDataTruncatedForColumn.Is(err) {
133133
return 0, err
134134
}
135135
bi, _, err := t.Convert(ctx, b)
136-
if err != nil && !ErrConvertingToEnum.Is(err) {
136+
if err != nil && !ErrConvertingToEnum.Is(err) && !ErrDataTruncatedForColumn.Is(err) {
137137
return 0, err
138138
}
139139

@@ -164,16 +164,17 @@ func (t EnumType) Convert(ctx context.Context, v interface{}) (interface{}, sql.
164164

165165
switch value := v.(type) {
166166
case int:
167-
if _, ok := t.At(value); ok {
168-
// Special handling for index 0 in strict mode
169-
if value == 0 {
170-
if sqlCtx, ok := ctx.(*sql.Context); ok {
171-
sqlMode := sql.LoadSqlMode(sqlCtx)
172-
if sqlMode.ModeEnabled(sql.StrictTransTables) {
173-
return nil, sql.OutOfRange, ErrDataTruncatedForColumn.New("")
174-
}
167+
// Special handling for index 0 (empty value) in strict mode
168+
if value == 0 {
169+
if sqlCtx, ok := ctx.(*sql.Context); ok {
170+
sqlMode := sql.LoadSqlMode(sqlCtx)
171+
if sqlMode.ModeEnabled(sql.StrictTransTables) {
172+
return nil, sql.OutOfRange, ErrDataTruncatedForColumn.New("")
175173
}
176174
}
175+
return uint16(0), sql.InRange, nil
176+
}
177+
if _, ok := t.At(value); ok {
177178
return uint16(value), sql.InRange, nil
178179
}
179180
case uint:

0 commit comments

Comments
 (0)