Skip to content

Commit 02b0cc7

Browse files
author
James Cor
committed
fix and test
1 parent 8d34778 commit 02b0cc7

File tree

3 files changed

+88
-3
lines changed

3 files changed

+88
-3
lines changed

enginetest/queries/trigger_queries.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,91 @@ var TriggerTests = []ScriptTest{
506506
},
507507
},
508508
},
509+
{
510+
Name: "insert trigger with missing column default value",
511+
SetUpScript: []string{
512+
"CREATE TABLE t (i INT PRIMARY KEY, j INT NOT NULL);",
513+
`
514+
CREATE TRIGGER trig BEFORE INSERT ON t
515+
FOR EACH ROW
516+
BEGIN
517+
SET new.j = 10;
518+
END;`,
519+
},
520+
Assertions: []ScriptTestAssertion{
521+
{
522+
Query: "INSERT INTO t (i) VALUES (1);",
523+
Expected: []sql.Row{
524+
{types.OkResult{RowsAffected: 1}},
525+
},
526+
},
527+
{
528+
Query: "INSERT INTO t (i, j) VALUES (2, null);",
529+
Expected: []sql.Row{
530+
{types.OkResult{RowsAffected: 1}},
531+
},
532+
},
533+
{
534+
Query: "SELECT * FROM t;",
535+
Expected: []sql.Row{
536+
{1, 10},
537+
{2, 10},
538+
},
539+
},
540+
},
541+
},
542+
{
543+
Name: "not null column with trigger that sets null should error",
544+
SetUpScript: []string{
545+
"CREATE TABLE t (i INT PRIMARY KEY, j INT NOT NULL);",
546+
`
547+
CREATE TRIGGER trig BEFORE INSERT ON t
548+
FOR EACH ROW
549+
BEGIN
550+
SET new.j = null;
551+
END;`,
552+
},
553+
Assertions: []ScriptTestAssertion{
554+
{
555+
Query: "INSERT INTO t (i) VALUES (1);",
556+
ExpectedErr: sql.ErrInsertIntoNonNullableDefaultNullColumn,
557+
},
558+
{
559+
Query: "INSERT INTO t (i, j) VALUES (1, 2);",
560+
ExpectedErr: sql.ErrInsertIntoNonNullableProvidedNull,
561+
},
562+
},
563+
},
564+
{
565+
Name: "not null column with before insert trigger should error",
566+
SetUpScript: []string{
567+
"CREATE TABLE t (i INT PRIMARY KEY, j INT NOT NULL);",
568+
`
569+
CREATE TRIGGER trig BEFORE INSERT ON t
570+
FOR EACH ROW
571+
BEGIN
572+
SET new.i = 10 * new.i;
573+
END;`,
574+
},
575+
Assertions: []ScriptTestAssertion{
576+
{
577+
Query: "INSERT INTO t (i) VALUES (1);",
578+
ExpectedErr: sql.ErrInsertIntoNonNullableDefaultNullColumn,
579+
},
580+
{
581+
Query: "INSERT INTO t (i, j) VALUES (1, 2);",
582+
Expected: []sql.Row{
583+
{types.NewOkResult(1)},
584+
},
585+
},
586+
{
587+
Query: "SELECT * FROM t;",
588+
Expected: []sql.Row{
589+
{10, 2},
590+
},
591+
},
592+
},
593+
},
509594

510595
// UPDATE triggers
511596
{

sql/analyzer/inserts.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func wrapRowSource(ctx *sql.Context, insertSource sql.Node, destTbl sql.Table, s
142142
defaultExpr = col.Generated
143143
}
144144
if !col.Nullable && defaultExpr == nil && !col.AutoIncrement {
145-
missingVals[colIdx] = true
145+
missingVals[i] = true
146146
}
147147

148148
var err error

sql/rowexec/insert.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ type insertIter struct {
4646

4747
firstGeneratedAutoIncRowIdx int
4848

49-
missingFlagVal []bool
49+
missingValFlags []bool
5050
}
5151

5252
func getInsertExpressions(values sql.Node) []sql.Expression {
@@ -398,7 +398,7 @@ func (i *insertIter) validateNullability(ctx *sql.Context, dstSchema sql.Schema,
398398
if !col.Nullable && row[count] == nil {
399399
// In the case of an IGNORE we set the nil value to a default and add a warning
400400
if !i.ignore {
401-
if i.missingFlagVal[count] {
401+
if i.missingValFlags[count] {
402402
return sql.ErrInsertIntoNonNullableDefaultNullColumn.New(col.Name)
403403
}
404404
return sql.ErrInsertIntoNonNullableProvidedNull.New(col.Name)

0 commit comments

Comments
 (0)