@@ -4830,6 +4830,47 @@ SELECT * FROM cte WHERE d = 2;`,
48304830 Query : "SELECT subdate(da, f32/10) from typestable;" ,
48314831 Expected : []sql.Row {{time .Date (2019 , time .December , 30 , 0 , 0 , 0 , 0 , time .UTC )}},
48324832 },
4833+ {
4834+ Query : "SELECT date_add('4444-01-01', INTERVAL 5400000 DAY);" ,
4835+ Expected : []sql.Row {{nil }},
4836+ },
4837+ {
4838+ Query : "SELECT date_add('4444-01-01', INTERVAL -5300000 DAY);" ,
4839+ Expected : []sql.Row {{nil }},
4840+ },
4841+ {
4842+ Query : "SELECT subdate('2008-01-02', 12e10);" ,
4843+ Expected : []sql.Row {{nil }},
4844+ },
4845+ {
4846+ Query : "SELECT date_add('2008-01-02', INTERVAL 1000000 day);" ,
4847+ Expected : []sql.Row {{"4745-11-29" }},
4848+ },
4849+ {
4850+ Query : "SELECT subdate('2008-01-02', INTERVAL 700000 day);" ,
4851+ Expected : []sql.Row {{"0091-06-20" }},
4852+ },
4853+ {
4854+ Query : "SELECT date_add('0000-01-01:01:00:00', INTERVAL 0 day);" ,
4855+ // MYSQL uses a proleptic gregorian, however, Go's time package does normal gregorian.
4856+ Expected : []sql.Row {{"0000-01-01 01:00:00" }},
4857+ },
4858+ {
4859+ Query : "SELECT date_add('9999-12-31:23:59:59.9999994', INTERVAL 0 day);" ,
4860+ Expected : []sql.Row {{"9999-12-31 23:59:59.999999" }},
4861+ },
4862+ {
4863+ Query : "SELECT date_add('9999-12-31:23:59:59.9999995', INTERVAL 0 day);" ,
4864+ Expected : []sql.Row {{nil }},
4865+ },
4866+ {
4867+ Query : "SELECT date_add('9999-12-31:23:59:59.99999945', INTERVAL 0 day);" ,
4868+ Expected : []sql.Row {{"9999-12-31 23:59:59.999999" }},
4869+ },
4870+ {
4871+ Query : "SELECT date_add('9999-12-31:23:59:59.99999944444444444-', INTERVAL 0 day);" ,
4872+ Expected : []sql.Row {{nil }},
4873+ },
48334874 {
48344875 Query : `SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM othertable) othertable_one) othertable_two) othertable_three WHERE s2 = 'first'` ,
48354876 Expected : []sql.Row {
0 commit comments