@@ -341,6 +341,7 @@ func TestErrLevelsForResetStmtContext(t *testing.T) {
341341 require .NotEmpty (t , c .stmt , c .name )
342342 for _ , stmt := range c .stmt {
343343 msg := fmt .Sprintf ("%d: %s, stmt: %T" , i , c .name , stmt )
344+ ctx .GetSessionVars ().EnableStrictNotNullCheck = true
344345 ctx .GetSessionVars ().SQLMode = c .sqlMode
345346 require .NoError (t , ResetContextOfStmt (ctx , stmt ), msg )
346347 ec := ctx .GetSessionVars ().StmtCtx .ErrCtx ()
@@ -457,3 +458,98 @@ func TestAddUnchangedKeysForLockByRow_GlobalIndexNewTableID(t *testing.T) {
457458 require .Len (t , gotKeys , 1 )
458459 require .Equal (t , expectedKey , []byte (gotKeys [0 ]))
459460}
461+
462+ func TestStrictNotNullCheckForInsert (t * testing.T ) {
463+ ctx := mock .NewContext ()
464+ ctx .BindDomainAndSchValidator (& domain.Domain {}, nil )
465+
466+ cases := []struct {
467+ name string
468+ sqlMode mysql.SQLMode
469+ enableStrictNotNullCheck bool
470+ isSingleInsert bool
471+ expectBadNullLevel errctx.Level
472+ expectNoDefaultLevel errctx.Level
473+ }{
474+ {
475+ name : "non-strict,single-row,disable" ,
476+ sqlMode : mysql .ModeErrorForDivisionByZero ,
477+ enableStrictNotNullCheck : false ,
478+ isSingleInsert : true ,
479+ expectBadNullLevel : errctx .LevelWarn ,
480+ expectNoDefaultLevel : errctx .LevelWarn ,
481+ },
482+ {
483+ name : "strict,single-row,disable" ,
484+ sqlMode : mysql .ModeStrictAllTables | mysql .ModeErrorForDivisionByZero ,
485+ enableStrictNotNullCheck : false ,
486+ isSingleInsert : true ,
487+ expectBadNullLevel : errctx .LevelWarn ,
488+ expectNoDefaultLevel : errctx .LevelError ,
489+ },
490+ {
491+ name : "non-strict,single-row,enable" ,
492+ sqlMode : mysql .ModeErrorForDivisionByZero ,
493+ enableStrictNotNullCheck : true ,
494+ isSingleInsert : true ,
495+ expectBadNullLevel : errctx .LevelError ,
496+ expectNoDefaultLevel : errctx .LevelWarn ,
497+ },
498+ {
499+ name : "strict,single-row,enable" ,
500+ sqlMode : mysql .ModeStrictAllTables | mysql .ModeErrorForDivisionByZero ,
501+ enableStrictNotNullCheck : true ,
502+ isSingleInsert : true ,
503+ expectBadNullLevel : errctx .LevelError ,
504+ expectNoDefaultLevel : errctx .LevelError ,
505+ },
506+ {
507+ name : "non-strict,multi-row,disable" ,
508+ sqlMode : mysql .ModeErrorForDivisionByZero ,
509+ enableStrictNotNullCheck : false ,
510+ isSingleInsert : false ,
511+ expectBadNullLevel : errctx .LevelWarn ,
512+ expectNoDefaultLevel : errctx .LevelWarn ,
513+ },
514+ {
515+ name : "strict,multi-row,disable" ,
516+ sqlMode : mysql .ModeStrictAllTables | mysql .ModeErrorForDivisionByZero ,
517+ enableStrictNotNullCheck : false ,
518+ isSingleInsert : false ,
519+ expectBadNullLevel : errctx .LevelWarn ,
520+ expectNoDefaultLevel : errctx .LevelError ,
521+ },
522+ {
523+ name : "non-strict,multi-row,enable" ,
524+ sqlMode : mysql .ModeErrorForDivisionByZero ,
525+ enableStrictNotNullCheck : true ,
526+ isSingleInsert : false ,
527+ expectBadNullLevel : errctx .LevelWarn ,
528+ expectNoDefaultLevel : errctx .LevelWarn ,
529+ },
530+ {
531+ name : "strict,multi-row,enable" ,
532+ sqlMode : mysql .ModeStrictAllTables | mysql .ModeErrorForDivisionByZero ,
533+ enableStrictNotNullCheck : true ,
534+ isSingleInsert : false ,
535+ expectBadNullLevel : errctx .LevelError ,
536+ expectNoDefaultLevel : errctx .LevelError ,
537+ },
538+ }
539+
540+ for _ , c := range cases {
541+ ctx .GetSessionVars ().EnableStrictNotNullCheck = true
542+ ctx .GetSessionVars ().SQLMode = c .sqlMode
543+ ctx .GetSessionVars ().EnableStrictNotNullCheck = c .enableStrictNotNullCheck
544+ stmt := & ast.InsertStmt {Lists : [][]ast.ExprNode {{}}}
545+ if c .isSingleInsert {
546+ stmt .Lists = make ([][]ast.ExprNode , 1 )
547+ } else {
548+ stmt .Lists = make ([][]ast.ExprNode , 2 )
549+ }
550+ require .NoError (t , ResetContextOfStmt (ctx , stmt ), c .name )
551+ ec := ctx .GetSessionVars ().StmtCtx .ErrCtx ()
552+ require .Equal (t , c .expectBadNullLevel , ec .LevelMap ()[errctx .ErrGroupBadNull ], "%s: BadNull level" , c .name )
553+ require .Equal (t , c .expectNoDefaultLevel , ec .LevelMap ()[errctx .ErrGroupNoDefault ], "%s: NoDefault level" , c .name )
554+ }
555+ }
0 commit comments