Skip to content

Commit d977e49

Browse files
authored
Merge pull request #3280 from dolthub/angela/datetime
Allow string truncation when casting to `date`
2 parents 70b084e + eaa5fd9 commit d977e49

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

enginetest/queries/insert_queries.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2715,6 +2715,14 @@ var InsertErrorScripts = []ScriptTest{
27152715
Query: "insert into t values ('2020-01-01 a')",
27162716
ExpectedErr: sql.ErrInvalidValue,
27172717
},
2718+
{
2719+
Name: "try inserting incorrect date value",
2720+
SetUpScript: []string{
2721+
"create table t (d date)",
2722+
},
2723+
Query: "insert into t values ('2020-01-01 a')",
2724+
ExpectedErr: sql.ErrInvalidValue,
2725+
},
27182726
}
27192727

27202728
var InsertIgnoreScripts = []ScriptTest{

enginetest/queries/queries.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4285,6 +4285,18 @@ SELECT * FROM cte WHERE d = 2;`,
42854285
Query: "select cast('2020-01-01 12:34:56.123456' as datetime(6)) > cast('2020-01-01 12:34:56' as datetime)",
42864286
Expected: []sql.Row{{true}},
42874287
},
4288+
{
4289+
Query: "select cast('2020-01-01 a' as date)",
4290+
ExpectedWarning: 1292,
4291+
ExpectedWarningsCount: 1,
4292+
Expected: []sql.Row{{time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC)}},
4293+
},
4294+
{
4295+
Query: "select cast('2020-01-01abc123' as date)",
4296+
ExpectedWarning: 1292,
4297+
ExpectedWarningsCount: 1,
4298+
Expected: []sql.Row{{time.Date(2020, time.January, 1, 0, 0, 0, 0, time.UTC)}},
4299+
},
42884300
{
42894301
Query: `SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM othertable) othertable_one) othertable_two) othertable_three WHERE s2 = 'first'`,
42904302
Expected: []sql.Row{

sql/expression/convert.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,10 @@ func convertValue(ctx *sql.Context, val interface{}, castTo string, originType s
331331
}
332332
d, _, err := types.Date.Convert(ctx, val)
333333
if err != nil {
334-
return nil, err
334+
if !sql.ErrTruncatedIncorrect.Is(err) {
335+
return nil, err
336+
}
337+
ctx.Warn(mysql.ERTruncatedWrongValue, "%s", err.Error())
335338
}
336339
return d, nil
337340
case ConvertToDatetime:

0 commit comments

Comments
 (0)