@@ -19,8 +19,6 @@ import (
1919 "time"
2020
2121 . "github.com/pingcap/check"
22- "github.com/pingcap/tidb/ast"
23- "github.com/pingcap/tidb/model"
2422 "github.com/pingcap/tidb/util/mock"
2523 "github.com/pingcap/tidb/util/testleak"
2624 "github.com/pingcap/tidb/util/testutil"
@@ -443,132 +441,6 @@ func (s *testEvaluatorSuite) TestUTCDate(c *C) {
443441 c .Assert (n .String (), GreaterEqual , last .Format (types .DateFormat ))
444442}
445443
446- func (s * testEvaluatorSuite ) TestDateArith (c * C ) {
447- defer testleak .AfterTest (c )()
448- ctx := mock .NewContext ()
449-
450- // list all test cases
451- tests := []struct {
452- Date interface {}
453- Interval interface {}
454- Unit string
455- AddResult interface {}
456- SubResult interface {}
457- error bool
458- }{
459- // basic test
460- {"2011-11-11" , 1 , "DAY" , "2011-11-12" , "2011-11-10" , false },
461- // nil test
462- {nil , 1 , "DAY" , nil , nil , false },
463- {"2011-11-11" , nil , "DAY" , nil , nil , false },
464- // tests for different units
465- {"2011-11-11 10:10:10" , 1000 , "MICROSECOND" , "2011-11-11 10:10:10.001000" , "2011-11-11 10:10:09.999000" , false },
466- {"2011-11-11 10:10:10" , "10" , "SECOND" , "2011-11-11 10:10:20" , "2011-11-11 10:10:00" , false },
467- {"2011-11-11 10:10:10" , "10" , "MINUTE" , "2011-11-11 10:20:10" , "2011-11-11 10:00:10" , false },
468- {"2011-11-11 10:10:10" , "10" , "HOUR" , "2011-11-11 20:10:10" , "2011-11-11 00:10:10" , false },
469- {"2011-11-11 10:10:10" , "11" , "DAY" , "2011-11-22 10:10:10" , "2011-10-31 10:10:10" , false },
470- {"2011-11-11 10:10:10" , "2" , "WEEK" , "2011-11-25 10:10:10" , "2011-10-28 10:10:10" , false },
471- {"2011-11-11 10:10:10" , "2" , "MONTH" , "2012-01-11 10:10:10" , "2011-09-11 10:10:10" , false },
472- {"2011-11-11 10:10:10" , "4" , "QUARTER" , "2012-11-11 10:10:10" , "2010-11-11 10:10:10" , false },
473- {"2011-11-11 10:10:10" , "2" , "YEAR" , "2013-11-11 10:10:10" , "2009-11-11 10:10:10" , false },
474- {"2011-11-11 10:10:10" , "10.00100000" , "SECOND_MICROSECOND" , "2011-11-11 10:10:20.100000" , "2011-11-11 10:09:59.900000" , false },
475- {"2011-11-11 10:10:10" , "10.0010000000" , "SECOND_MICROSECOND" , "2011-11-11 10:10:30" , "2011-11-11 10:09:50" , false },
476- {"2011-11-11 10:10:10" , "10.0010000010" , "SECOND_MICROSECOND" , "2011-11-11 10:10:30.000010" , "2011-11-11 10:09:49.999990" , false },
477- {"2011-11-11 10:10:10" , "10:10.100" , "MINUTE_MICROSECOND" , "2011-11-11 10:20:20.100000" , "2011-11-11 09:59:59.900000" , false },
478- {"2011-11-11 10:10:10" , "10:10" , "MINUTE_SECOND" , "2011-11-11 10:20:20" , "2011-11-11 10:00:00" , false },
479- {"2011-11-11 10:10:10" , "10:10:10.100" , "HOUR_MICROSECOND" , "2011-11-11 20:20:20.100000" , "2011-11-10 23:59:59.900000" , false },
480- {"2011-11-11 10:10:10" , "10:10:10" , "HOUR_SECOND" , "2011-11-11 20:20:20" , "2011-11-11 00:00:00" , false },
481- {"2011-11-11 10:10:10" , "10:10" , "HOUR_MINUTE" , "2011-11-11 20:20:10" , "2011-11-11 00:00:10" , false },
482- {"2011-11-11 10:10:10" , "11 10:10:10.100" , "DAY_MICROSECOND" , "2011-11-22 20:20:20.100000" , "2011-10-30 23:59:59.900000" , false },
483- {"2011-11-11 10:10:10" , "11 10:10:10" , "DAY_SECOND" , "2011-11-22 20:20:20" , "2011-10-31 00:00:00" , false },
484- {"2011-11-11 10:10:10" , "11 10:10" , "DAY_MINUTE" , "2011-11-22 20:20:10" , "2011-10-31 00:00:10" , false },
485- {"2011-11-11 10:10:10" , "11 10" , "DAY_HOUR" , "2011-11-22 20:10:10" , "2011-10-31 00:10:10" , false },
486- {"2011-11-11 10:10:10" , "11-1" , "YEAR_MONTH" , "2022-12-11 10:10:10" , "2000-10-11 10:10:10" , false },
487- {"2011-11-11 10:10:10" , "11-11" , "YEAR_MONTH" , "2023-10-11 10:10:10" , "1999-12-11 10:10:10" , false },
488- // tests for interval in day forms
489- {"2011-11-11 10:10:10" , "20" , "DAY" , "2011-12-01 10:10:10" , "2011-10-22 10:10:10" , false },
490- {"2011-11-11 10:10:10" , 19.88 , "DAY" , "2011-12-01 10:10:10" , "2011-10-22 10:10:10" , false },
491- {"2011-11-11 10:10:10" , "19.88" , "DAY" , "2011-11-30 10:10:10" , "2011-10-23 10:10:10" , false },
492- {"2011-11-11 10:10:10" , "prefix19suffix" , "DAY" , "2011-11-30 10:10:10" , "2011-10-23 10:10:10" , false },
493- {"2011-11-11 10:10:10" , "20-11" , "DAY" , "2011-12-01 10:10:10" , "2011-10-22 10:10:10" , false },
494- {"2011-11-11 10:10:10" , "20,11" , "daY" , "2011-12-01 10:10:10" , "2011-10-22 10:10:10" , false },
495- {"2011-11-11 10:10:10" , "1000" , "dAy" , "2014-08-07 10:10:10" , "2009-02-14 10:10:10" , false },
496- {"2011-11-11 10:10:10" , "true" , "Day" , "2011-11-12 10:10:10" , "2011-11-10 10:10:10" , false },
497- {"2011-11-11 10:10:10" , true , "Day" , "2011-11-12 10:10:10" , "2011-11-10 10:10:10" , false },
498- // test for different return data types
499- {"2011-11-11" , 1 , "DAY" , "2011-11-12" , "2011-11-10" , false },
500- {"2011-11-11" , 10 , "HOUR" , "2011-11-11 10:00:00" , "2011-11-10 14:00:00" , false },
501- {"2011-11-11" , 10 , "MINUTE" , "2011-11-11 00:10:00" , "2011-11-10 23:50:00" , false },
502- {"2011-11-11" , 10 , "SECOND" , "2011-11-11 00:00:10" , "2011-11-10 23:59:50" , false },
503- {"2011-11-11" , "10:10" , "HOUR_MINUTE" , "2011-11-11 10:10:00" , "2011-11-10 13:50:00" , false },
504- {"2011-11-11" , "10:10:10" , "HOUR_SECOND" , "2011-11-11 10:10:10" , "2011-11-10 13:49:50" , false },
505- {"2011-11-11" , "10:10:10.101010" , "HOUR_MICROSECOND" , "2011-11-11 10:10:10.101010" , "2011-11-10 13:49:49.898990" , false },
506- {"2011-11-11" , "10:10" , "MINUTE_SECOND" , "2011-11-11 00:10:10" , "2011-11-10 23:49:50" , false },
507- {"2011-11-11" , "10:10.101010" , "MINUTE_MICROSECOND" , "2011-11-11 00:10:10.101010" , "2011-11-10 23:49:49.898990" , false },
508- {"2011-11-11" , "10.101010" , "SECOND_MICROSECOND" , "2011-11-11 00:00:10.101010" , "2011-11-10 23:59:49.898990" , false },
509- {"2011-11-11 00:00:00" , 1 , "DAY" , "2011-11-12 00:00:00" , "2011-11-10 00:00:00" , false },
510- {"2011-11-11 00:00:00" , 10 , "HOUR" , "2011-11-11 10:00:00" , "2011-11-10 14:00:00" , false },
511- {"2011-11-11 00:00:00" , 10 , "MINUTE" , "2011-11-11 00:10:00" , "2011-11-10 23:50:00" , false },
512- {"2011-11-11 00:00:00" , 10 , "SECOND" , "2011-11-11 00:00:10" , "2011-11-10 23:59:50" , false },
513- // tests for invalid input
514- {"2011-11-11" , "abc1000" , "MICROSECOND" , nil , nil , true },
515- {"20111111 10:10:10" , "1" , "DAY" , nil , nil , true },
516- {"2011-11-11" , "10" , "SECOND_MICROSECOND" , nil , nil , true },
517- {"2011-11-11" , "10.0000" , "MINUTE_MICROSECOND" , nil , nil , true },
518- {"2011-11-11" , "10:10:10" , "MINUTE_MICROSECOND" , nil , nil , true },
519- }
520-
521- // run the test cases
522- for _ , t := range tests {
523- op := ast .NewValueExpr (ast .DateAdd )
524- dateArithInterval := ast .NewValueExpr (
525- ast.DateArithInterval {
526- Unit : t .Unit ,
527- Interval : ast .NewValueExpr (t .Interval ),
528- },
529- )
530- date := ast .NewValueExpr (t .Date )
531- expr := & ast.FuncCallExpr {
532- FnName : model .NewCIStr ("DATE_ARITH" ),
533- Args : []ast.ExprNode {
534- op ,
535- date ,
536- dateArithInterval ,
537- },
538- }
539- ast .SetFlag (expr )
540- v , err := Eval (ctx , expr )
541- if t .error == true {
542- c .Assert (err , NotNil )
543- } else {
544- c .Assert (err , IsNil )
545- if v .IsNull () {
546- c .Assert (nil , Equals , t .AddResult )
547- } else {
548- c .Assert (v .Kind (), Equals , types .KindMysqlTime )
549- value := v .GetMysqlTime ()
550- c .Assert (value .String (), Equals , t .AddResult )
551- }
552- }
553-
554- op = ast .NewValueExpr (ast .DateSub )
555- expr .Args [0 ] = op
556- v , err = Eval (ctx , expr )
557- if t .error == true {
558- c .Assert (err , NotNil )
559- } else {
560- c .Assert (err , IsNil )
561- if v .IsNull () {
562- c .Assert (nil , Equals , t .AddResult )
563- } else {
564- c .Assert (v .Kind (), Equals , types .KindMysqlTime )
565- value := v .GetMysqlTime ()
566- c .Assert (value .String (), Equals , t .SubResult )
567- }
568- }
569- }
570- }
571-
572444func (s * testEvaluatorSuite ) TestStrToDate (c * C ) {
573445 tests := []struct {
574446 Date string
0 commit comments